عند تعريف طريقة على أنها ساكنة ( PHP Static Method ) ، فلا يمكننا استخدام خصائص الفئة داخلها وبالتالي لا يمكن استخدام الكلمة this . لكن إذا كانت الخصائص ساكنة ( PHP Static Properties ) ، فيمكننا إذاً استخدامها داخل الطريقة الساكنة.
– تستخدم المكونات الساكنة للفئة من داخل الفئة باستخدام الكلمة self ثم المعامل ( :: ) ثم اسم العنصر.
– عند استدعاء العناصر من خارج الفئة نكتب اسم الفئة ثم المعامل ( :: ) ثم اسم العنصر.
السمات العامة للطرق الساكنة يمكن الوصول مباشرةً للطرق الساكنه دون الحاجة لإنشاء كائن جديد. لايمكن استخدام الخصائص العادية ( الغير ساكنة ) داخل الطرق الساكنة. إذا كانت جميع الطرق ساكنه ستكون الفئة نفسها ساكنة. يتم اعتبار الطرق الساكنه عامة public ما لم يتم تحديد مجال رؤية مخصص ( PHP Visibility ). <?php class test{ //متغير ساكن public static $var1="Hello"; //دالة ساكنة public static function a(){ return self::$var1; } // دالة ساكنة أخرى تستخدم الدالة الساكنة الأولى public static function b(){ echo self::a().' '."World"; } } echo test::b(); ?>شرح الكود :
في السطر رقم 4 قمنا بتعريف خاصية ساكنه var1 وأعطيناه القيمة ” Hello ” . ثم في السطر رقم 6 قمنا بتعريف طريقة ساكنه ()a والتي دورها استرجاع قيمة ( PHP Returning Values ) الخاصية var1. ثم في السطر رقم 10 قمنا بعمل طريقة ساكنة ()b ستقوم بطباعة نتيجة الطريقة ()a ودمجها ( String Concatenation ) مع السلسلة النصية ” World “. لاحظ استخدام الكلمة self عند استخدام المتغير الساكن داخل الطريقة. مباشرةً قمنا بطباعة نتيجة الطريقة الساكنة ()b من خارج الفئة باستخدام اسم الفئة متبوعاً بالعلامة ( :: ) ثم اسم الطريقة . فتكون النتيجة ” Hello World “.[button title=”عرض نتيجة / تحميل الكود” link=”https://makiomar.com/php-oop/php_statics/php_static_method/php_static_method.php” target=”_blank” size=”” color=”” class=””]
الطرق الساكنة والتوريثكما هو الحال في الخصائص الساكنة ( PHP Static Properties ) ، عند التوريث يمكن استخدام طرق الفئة الموروثة ( الأب ) داخل الفئة الوارثة ( الإبن ) باستخدام الكلمة parent متبوعة بالعلامة ( :: ) ثم اسم الطريقة.
<?php class test{ //متغير ساكن public static $var1="Hi"; //دالة ساكنة public static function a(){ return self::$var1; } } class test2 extends test{ public static function b(){ echo parent::a().' '."There"; } } $test= new test2(); $test->b(); ?>كما نلاحظ في السطر رقم 12 قمنا باستخدام الطريقة الساكنة ()a داخل الفئة الوارثة ()test2.
[button title=”عرض نتيجة / تحميل الكود” link=”https://makiomar.com/php-oop/php_statics/php_static_method/php_static_method_inherit.php” target=”_blank” size=”” color=”” class=””]
كما نعلم أن استخدام الخصائص العادية ( الغير ساكنة ) لا يتم باستخدام العلامة ( :: ) وإذا حاولنا ذلك يظهر خطأ فادح ( Fetal Error ) . لكن بالنسبة للطرق الساكنه يمكن أن يظهر تحذير فقط لكن ستعمل الطريقة بشكل طبيعي.
<?php class test{ //متغير ساكن public static $var1="Hi"; //دالة ساكنة public function a(){ echo self::$var1.' '."There"; } } test::a(); ?>كما نلاحظ في السطر رقم 6 تم تعريف طريقة غير ساكنة ، ثم تم الوصول للطريقة الغير ساكنة مباشرة باستخدام العلامة ( :: ) في السطرر قم 10 ، وسيتم عرض ” HI There “.


