منبع: chatgpt
در PHP، کلاسهای Abstract (انتزاعی) کلاسهایی هستند که نمیتوان مستقیماً از آنها نمونهسازی (ایجاد شیء) کرد. این نوع کلاسها بیشتر برای تعریف یک ساختار پایه بهکار میروند و شامل متدهایی هستند که ممکن است پیادهسازی نشده باشند. کلاسهای فرزند که از یک کلاس انتزاعی ارثبری میکنند، باید متدهای تعریفشدهی بدون پیادهسازی در کلاس والد را پیادهسازی کنند.
ویژگیهای کلاسهای Abstract:
- کلاس انتزاعی نمیتواند مستقیماً نمونهسازی شود.
- میتواند شامل متدهای پیادهسازیشده و همچنین متدهای انتزاعی (بدون پیادهسازی) باشد.
- متدهای انتزاعی فقط در کلاسهای انتزاعی تعریف میشوند و کلاسهای فرزند موظف به پیادهسازی آنها هستند.
مثال:
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
را پیادهسازی کند.
مزایا:
- کلاسهای انتزاعی برای تعریف یک ساختار پایه برای کلاسهای فرزند استفاده میشوند.
- این نوع کلاسها به شما اجازه میدهند تا برخی از متدها را پیادهسازی کنید و برخی دیگر را برای پیادهسازی در کلاسهای فرزند باز بگذارید.
- پیادهسازی یک قالب کلی از رفتارها برای کلاسهای مشتقشده، بدون تحمیل همه جزئیات به کلاس والد.