کلاس final و متد final

کلاس final (کلاس نهایی)، کلاسی است که دیگر کلاس‌ها نمی‌توانند از آن ارث بری کنند و چون قابلیت ارث بری ندارد نمی‌تواند مجرد (abstract) هم باشد. مثال زیر یک کلاس final را نشان می‌دهد :

 <?php
    final class Base
    {
       public $someField;

       public function SomeMethod()
       {
          //Do something here
       }

    }

    class Derived extends Base
    {
       //This class cannot inherit the Base class
    }             
?>
( ! ) Fatal error: Class Derived may not inherit from final class (Base)

برای تعریف این کلاس‌ها از کلمه کلیدی final استفاده می‌شود. مشاهده می‌کنید که کلاس نهایی مانند کلاس‌های عادی، دارای فیلد، خواص، و متد می‌باشند. کلاس مشتق (Derived) در مثال بالا نمی‌تواند از کلاس نهایی (Base) ارث بری کند. وقتی یک کلاس را نهایی می‌کنیم، تمام متدهای آن نیز نهایی می‌شوند. استفاده از این کلاسها همانطور که ذکر شد زمانی مفید است که بخواهید کلاسی ایجاد کنید که دیگر کلاسها نتوانند از آن ارث بری کنند.

متد Final

متد final به متدی گفته می‌شود که هیچ زیر کلاسی نتواند آن را بازنویسی یا Override کند. به مثال زیر توجه کنید :

 <?php
    class Base
    {
           final function ShowMessage()
        {
            echo "This is a final method!" ;        
        }
    }

    class Derived extends Base
    {
        function ShowMessage()
        {
            parent::ShowMessage();        
        }
    }             
?>
( ! ) Fatal error: Cannot override final method Base::ShowMessage()

اگر کدهای بالا را اجرا کنید، مشاهده می‌کنید که خطا به وجود می‌آید. چون کلاس Child از کلاس Parent ارث بری کرده است و زیر کلاس محسوب می‌شود و طبق تعریف هیچ زیر کلاسی نمی‌تواند متدهای final را بازنویسی کند.