کلاس 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 را بازنویسی کند.

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر مطرح بفرمایید.

  1. ابراهیم پاسخ دادن

    مرسی مهندس
    اینطور مباحث پیشرفته در php از کجا میتونم آموزش ببینم

    • یونس ابراهیمی پاسخ دادن

      خواهش می کنم، در حال تهیه آموزش های پیشرفته هستم، ممنون میشم سایت رو به دوستاتون معرفی بفرمایید.