آموزش برنامه نویسی شی گرا php oop
کلمه کلیدی استاتیک خیلی مهم در مبحث شی گرایی است.
متد ها و پروپرتی های استاتیک نقش حیاتی ای در طراحی نرم افزار و دیساین پترن بازی میکنن. (design patern)
هنگامی که شما میخواین از شی ای استفاده کنین.
نمونه ای از آن را ایجاد میکنین. $a=new class();
در غیر این صورت شما نمی توانید به آن شی دسترسی پیدا کنین.
اما برای متد ها و پروپرتی هایی که استاتیک هستن راه دیگه ای وجود داره
شما به متد ها و پروپرتی هایی که به صورت استاتیک تعریف شده اند می توانید به صورت مستقیم دسترسی داشته باشین بدون اینکه نمونه ای از اون کلاس ایجاد کنین
استاتیک ها مانند گلوبال ها هستند.
علاوه بر این متد ها یا پروپرتی های استاتیک میتونن آخرین وضعیتی که دریافت کردن و اختصاص یافتنو در خود نگه دارند.
استاتیک ها فعالیت های ویژه ای انجام میدن.
همچنین آبجکت های ویژه ای
در مباحث دیساین پترن استفاده میشن
مثال
برای فراخوانی متد یا پروپرتی استاتیک بیرون از کلاس از نام کلاس استفاده میشه به علاوه دو نقطه(class::)
در داخل کلاس اگر متد یا پروپرتی ای که استاتیک هستو بخواین فراخوانی کنین از سلف دونقطه استفاده میشه(self::)
نباید همیشه از استاتیک استفاده کرد.
برای درک بهتر به مثال های زیر توجه کنین:
مثال اول:
class DBManager { public static function getMySQLDriver() { //instantiate a new MySQL Driver object and return } public static function getPostgreSQLDriver() { //instantiate a new PostgreSQL Driver object and return } public static function getSQLiteDriver() { //instantiate a new MySQL Driver object and return } } $dbdriver = DBManager::getMySQLDriver();
مثال دوم:
class StaticTester { private static $id = 0; function __construct() { self::$id +=1; } public static function checkIdFromStaticMehod() { echo "Current Id From Static Method is " . self::$id . "<br/>"; } public function checkIdFromNonStaticMethod() { echo "Current Id From Non Static Method is " . self::$id . "<br/>"; } } $st1 = new StaticTester(); // ابتدا کانستراکتور فراخوانی میشود سپس آیدی یدونه اضافه میشه StaticTester::checkIdFromStaticMehod(); //id=1 $st2 = new StaticTester(); $st1->checkIdFromNonStaticMethod(); //id=2 $st1->checkIdFromStaticMehod(); //id=2 $st2->checkIdFromNonStaticMethod(); //id=2 $st3 = new StaticTester(); StaticTester::checkIdFromStaticMehod(); //id=3