دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / ارث‌بری (PHP Inheritance)

ارث‌بری (PHP Inheritance)

30 دقیقه Article

وراثت (Inheritance): قدرتِ نسل‌ها 🧬👑

وراثت یعنی یک کلاسِ جدید (فرزند) ویژگی‌ها و رفتارهایِ یک کلاسِ موجود (والد) را به ارث ببرد. این باعث می‌شود در کدنویسی صرفه‌جویی کنیم و کدهایِ تکراری ننویسیم.

استفاده از کلمه کلیدیِ extends

کلاسِ فرزند با extends تمامِ متعلقاتِ public و protected والد را صاحب می‌شود.

{code_block('class Animal { ... }\nclass Cat extends Animal { ... }')}

بازنویسی (Overriding):

فرزند می‌تواند متدی که از پدر ارث برده را مجدداً برای خودش تعریف کند تا رفتارِ متفاوتی نشان دهد. مثلاً "صدایِ حیوان" برای گربه به "میو" تغییر کند.

کلمه کلیدیِ final: اگر می‌خواهید جلویِ ارث‌بری از یک کلاس یا بازنویسیِ یک متد را بگیرید، از final استفاده کنید. این یعنی این کلاس آخرین نسخه‌یِ نسلِ خود است!
والدِ والد: در PHP یک کلاس فقط می‌تواند از یک کلاسِ دیگر ارث‌بری مستقیم داشته باشد (Single Inheritance). اما می‌تواند زنجیره‌ای باشد (A ارث از B، و B ارث از C).

دسترسی به والد:

اگر بخواهید داخلِ فرزند، متدِ والد را صدا بزنید، از parent::methodName() استفاده کنید.

<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: معماریِ پیشرفته و مهندسیِ اشیاء 🐘💎

برنامه‌نویسیِ شیءگرا در PHP پس از نسخه‌یِ ۷ و ۸ تغییراتِ بنیادینی داشته و به ابزاری بسیار قدرتمند برایِ ساختِ سیستم‌هایِ پیچیده تبدیل شده است.

۱. ساختارِ حافظه و Object Handles

در PHP، متغیرهایی که حاویِ یک شیء هستند، خودِ شیء را ذخیره نمی‌کنند؛ بلکه یک Identifier یا دستگیره (Handle) را نگه می‌دارند که به جدولِ اشیاءِ درونیِ موتورِ Zend Engine اشاره می‌کند. به همین دلیل است که وقتی یک شیء را به تابعی پاس می‌دهید، تغییرات در همان شیءِ اصلی اعمال می‌شود (شبه‌ارجاع).

۲. رعایتِ اصولِ SOLID

در طراحیِ کلاس‌ها، همیشه به اصلِ Single Responsibility پایبند باشید. یک کلاس باید فقط یک دلیل برایِ تغییر داشته باشد. استفاده از Interfaces به شما اجازه می‌دهد وابستگی‌هایِ کدتان را به حداقل برسانید (Dependency Inversion).

۳. کدهایِ JIT-Friendly

موتورِ JIT در PHP 8 کدها را به زبانِ ماشین تبدیل می‌کند. نوشتنِ کدهایِ شیءگرا با ساختارِ مشخص و استفاده از Property Typing به JIT کمک می‌کند تا کدهایِ شما را بسیار بهینه‌تر اجرا کند.

نکته مهندسی: همیشه از Strict Types استفاده کنید. این کار باعث می‌شود خطاهایِ منطقی در زمانِ توسعه پیدا شوند و از رفتارهایِ پیش‌بینی‌نشده در هنگامِ کار با متدها جلوگیری شود.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

ایجادِ وراثت Easy
سوال تمرین

کلاسی به نام Strawberry بسازید که از کلاسِ Fruit ارث‌بری کند.

پاسخ تمرین
PHP
<?php
class Fruit {}
class Strawberry extends Fruit {
}
?>

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.