
وراثت در PHP
در این بخش به بررسی وراثت در PHP می پردازیم، وراثت در برنامه نویسی شی گرا یعنی وقتی که یک کلاس از کلاس دیگری مشتق می شود.
کلاس فرزند تمامی پراپرتی های public
و protected
و متد ها را از کلاس والد یا مادر به ارث خواهد برد، علاوه بر این می تواند تمامی پراپرتی ها و متد های خاص خودش را هم داشته باشد.
یک کلاس مشتق شده با استفاده از کلمه کلیدی extends
مشخص می شود.
مثال
خروجی
Am I a fruit or a berry? The fruit is Strawberry and the color is red.
توضیح مثال بالا
کلاس Strawberry از کلاس Fruit ارث بری کرده است. یعنی در اینجا کلاس فرزند Strawberry و کلاس والد یا مادر Fruit است.
این باعث می شود که کلاس Strawberry به تمامی پراپرتی های $name
و $color
که از نوع public
هستند دسترسی داشته باشد، همچنین به تمامی متد های __construct()
و intro()
که از نوع public
هستند دسترسی خواهد داشت.
فصل قبلی راجب سطح دسترسی ها یا همان مفهوم Access Modifiers صحبت کرده ایم، اگر این بخش را ندیده اید حتماً قبل از خواندن این فصل مبحث Access Modifiers ها را مطالعه کنید.
همچنین کلاس Strawberry نیز متد خاص خود را دارد: message()
وراثت و سطح دسترسی protected در PHP
در بخش قبلی یاد گرفتیم که می توانیم به پراپرتی ها و متد های با سطح دسترسی protected
در کلاس ها و کلاس های مشتق شده دسترسی داشته باشیم. حالا این یعنی چی ؟! به مثال ها خوب دقت کنید…
مثال
خروجی
Am I a fruit or a berry?
در مثال بالا می بینیم که اگر بخواهیم یک متد با سطح دسترسی protected
(محافظت شده) را خارج از کلاس فراخوانی کنیم خطا میگیریم. البته فراموش نکنید که متد های از نوع public
بدون مشکل خارج از کلاس فراخوانی می شوند.
اکنون به مثال زیر دقت کنید:
مثال
خروجی
Am I a fruit or a berry? The fruit is Strawberry and the color is red.
در مثال بالا می بینید که همه چیز به درستی کار می کند، بخاطر اینکه متد intro()
که از نوع protected
هست را داخل کلاس مشتق شده استفاده کرده ایم.
لغو و تعریف مجدد متد های ارث بری شده در PHP
ما می توانیم متد های تعریف شده کلاس والد را در کلاس فرزند با همان نام مجدداً تعریف کنیم.
به مثال زیر دقت کنید: متد های __construct()
و intro()
در کلاس فرزند (Strawberry)، متد های __construct()
و intro()
در کلاس والد (Fruit) را باطل و تغییر داده است.
مثال
خروجی
The fruit is Strawberry, the color is red, and the weight is 50 gram.
کلید واژه final در PHP
از کلمه کلیدی final
برای جلوگیری از ارث بری یک کلاس و یا جلوگیری از تعریف مجدد متد ها استفاده می کنیم.
مثال
در مثال زیر کلاس Strawberry نمی تواند از کلاس Fruit ارث بری کند یا فرزند آن بشود، زیرا کلاس Fruit با کلید واژه final
تعریف شده است.
خروجی چیزی شبیه به این خواهد بود
PHP Fatal error: Class Strawberry may not inherit from final class (Fruit) in /home/o6MTL0/prog.php on line 10
مثال
در مثال زیر کلاس Strawberry نمی تواند متد intro()
را Overriding یا همان تعریف مجدد بکند زیرا این متد در کلاس Fruit با کلید واژه final
تعریف شده است.
خروجی چیزی شبیه به این خواهد بود
PHP Fatal error: Cannot override final method Fruit::intro() in /home/sdpysj/prog.php on line 15
آیا این مطلب برای شما مفید بود ؟
شناخت روز عيد
و درود خدا بر او، فرمود: (در يكى از روزهاى عيد) اين عيد كسى است كه خدا روزه اش را پذيرفته، و نماز او را ستوده است، و هر روز كه خدا را نافرمانى نكنند، آن روز عيد است.
حکمت 428 نهج البلاغه