دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / کلاس‌های انتزاعی (PHP Abstract Classes)

کلاس‌های انتزاعی (PHP Abstract Classes)

30 دقیقه Article

کلاس‌هایِ انتزاعی: نقشه‌هایِ ناتمام 📐🌫️

کلاسِ انتزاعی (Abstract) کلاسی است که مستقیماً نمی‌توان از رویِ آن شیء ساخت. این کلاس فقط به عنوانِ یک "الگو" برایِ فرزندانش عمل می‌کند.

متدِ انتزاعی چیست؟

متدی است که فقط نام و پارامترهایش تعریف شده اما هیچ کدی (بدنه) ندارد. فرزندان مجبور هستند این متد را تکمیل کنند.

{code_block('abstract class Car {\n abstract public function intro();\n}')}

قوانینِ بازی:

  1. اگر کلاسی حتی یک متدِ abstract داشته باشد، کلِ کلاس باید abstract تعریف شود.
  2. کلاسِ فرزند باید تمامِ متدهایِ انتزاعیِ والد را با همان سطحِ دسترسی یا آزادتر پیاده‌سازی کند.
چرا استفاده می‌کنیم؟ برایِ استانداردسازی. مثلاً می‌خواهید مطمئن شوید که تمامِ مدل‌هایِ ماشین در برنامه‌یِ شما حتماً متدی به نام drive دارند، اما هر کدام به روشِ خودشان حرکت می‌کنند.

قدرتِ طراحی:

کلاسِ انتزاعی می‌تواند متدهایِ عادی (با کد) هم داشته باشد، برخلافِ اینترفیس‌ها که کاملاً توخالی هستند.

انعطاف در پارامترها: کلاسِ فرزند می‌تواند پارامترهایِ انتخابیِ (Optional) بیشتری نسبت به والد در متدِ پیاده‌سازی شده داشته باشد.
<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 استفاده کنید. این کار باعث می‌شود خطاهایِ منطقی در زمانِ توسعه پیدا شوند و از رفتارهایِ پیش‌بینی‌نشده در هنگامِ کار با متدها جلوگیری شود.

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

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

تعریفِ کلاسِ انتزاعی Medium
سوال تمرین

یک کلاسِ انتزاعی به نام Shape تعریف کنید که یک متدِ انتزاعی به نام getArea داشته باشد.

پاسخ تمرین
PHP
<?php
abstract class Shape {
  abstract public function getArea();
}
?>

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

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