کلاس abstract در php چیست؟

منبع: chatgpt

در PHP، کلاس‌های Abstract (انتزاعی) کلاس‌هایی هستند که نمی‌توان مستقیماً از آنها نمونه‌سازی (ایجاد شیء) کرد. این نوع کلاس‌ها بیشتر برای تعریف یک ساختار پایه به‌کار می‌روند و شامل متدهایی هستند که ممکن است پیاده‌سازی نشده باشند. کلاس‌های فرزند که از یک کلاس انتزاعی ارث‌بری می‌کنند، باید متدهای تعریف‌شده‌ی بدون پیاده‌سازی در کلاس والد را پیاده‌سازی کنند.

ویژگی‌های کلاس‌های Abstract:

  1. کلاس انتزاعی نمی‌تواند مستقیماً نمونه‌سازی شود.
  2. می‌تواند شامل متدهای پیاده‌سازی‌شده و همچنین متدهای انتزاعی (بدون پیاده‌سازی) باشد.
  3. متدهای انتزاعی فقط در کلاس‌های انتزاعی تعریف می‌شوند و کلاس‌های فرزند موظف به پیاده‌سازی آنها هستند.

مثال:

abstract class Shape {
    protected $color;

    public function __construct($color) {
        $this->color = $color;
    }

    // متد انتزاعی - باید در کلاس‌های فرزند پیاده‌سازی شود
    abstract public function area();

    // متد معمولی - می‌تواند پیاده‌سازی داشته باشد
    public function getColor() {
        return $this->color;
    }
}

class Rectangle extends Shape {
    private $width;
    private $height;

    public function __construct($color, $width, $height) {
        parent::__construct($color);
        $this->width = $width;
        $this->height = $height;
    }

    // پیاده‌سازی متد انتزاعی area
    public function area() {
        return $this->width * $this->height;
    }
}

$rectangle = new Rectangle('red', 5, 10);
echo "Area: " . $rectangle->area(); // خروجی: Area: 50
echo "Color: " . $rectangle->getColor(); // خروجی: Color: red

در این مثال، کلاس Shape یک کلاس انتزاعی است که شامل یک متد انتزاعی area و یک متد معمولی getColor است. کلاس Rectangle از Shape ارث‌بری می‌کند و موظف است متد area را پیاده‌سازی کند.

مزایا:

  • کلاس‌های انتزاعی برای تعریف یک ساختار پایه برای کلاس‌های فرزند استفاده می‌شوند.
  • این نوع کلاس‌ها به شما اجازه می‌دهند تا برخی از متدها را پیاده‌سازی کنید و برخی دیگر را برای پیاده‌سازی در کلاس‌های فرزند باز بگذارید.
  • پیاده‌سازی یک قالب کلی از رفتارها برای کلاس‌های مشتق‌شده، بدون تحمیل همه جزئیات به کلاس والد.

دیدگاه‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *