إضافة الطرق النهائية داخل الفئات تمنع الفئات الوارثة ( PHP Inheritance ) من تخطي الطريقة ( PHP Methods Overriding) عن طريق اضافة الكلمة final قبل الطريقة. وإذا كانت الفئة نفسها نهائية ( PHP Final Classes ) فلا يمكن توريثها.
[highlight background=”” color=””]لا يمكن تعريف الخصائص Properties على أنها نهائية ، إنما يمكن ذلك للطرق أو الفئات[/highlight]
<?php class BaseClass { final public function test() { echo "BaseClass::test() called\n"; } } class ChildClass extends BaseClass { public function test() { echo "BaseClass::test() called\n"; } } // Results in Fatal error: Cannot override final method BaseClass::moreTesting() ?>شرح الكود :
في السطر رقم 2 قمنا بتعريف الفئة BaseClass ثم في السطر رقم 3 قمنا بتعريف الطريقة ()test وهي طريقة نهائية باستخدام الكلمة final طلب طباعة الجملة “BaseClass::test() called” في السطر رقم 4 ثم قمنا بتوريث الفئة BaseClass للفئة ChildClass في السطر رقم 7 ثم قمنا بإعادة تعريف الطريقة ()test في السطر رقم 8 طلب طباعة نفس الجملة في السطر رقم 9 عند تجربة الكود سيظهر خطأ فادح ( Fetal Error ) ينص على أن هناك محاولة لتخطي سلوك الطريقة النهائية ()test.بالرغم من أننا لم نغير في سلوك الطريقة إلا أنه يظهر هذا الخطأ وهذا يعني أن استخدام الكلمة final تمنع نهائياً إعادة تعريف الطريقة في الفئات الوارثه. وهو منطق مقبول فإذا كانت الفئة نهائيه ولا يمكن تخطي سلوكها ، فما الفائده من إعاده تعريفها في الفئة الوارثة ونحن نعرف أن الفئة الوارثة ترث خصائص وطرق الفئة الموروثه ( مع الأخذ في الإعتبار حدود الرؤية PHP Visibility )
[highlight background=”” color=””]أحياناً لا يظهر الخطأ حسب إعدادات معالجة الأخطاء PHP Error Handling[/highlight]


