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

PHP - کلاس‌ها و متدهای انتزاعی چیستند؟

کلاس‌ها و متدهای انتزاعی زمانی کاربرد دارند که کلاس والد یک متد با نام مشخص داشته باشد، اما نیاز باشد که کلاس‌های فرزند آن وظایف آن را تکمیل کنند.

یک کلاس انتزاعی کلاسی است که حداقل یک متد انتزاعی داشته باشد. یک متد انتزاعی، متدی است که اعلام شده اما در کد پیاده‌سازی نشده است.

یک کلاس یا متد انتزاعی با استفاده از کلمه کلیدی abstract تعریف می‌شود:

نحو

<?php
abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>

قوانین ارث‌بری از یک کلاس انتزاعی

  • متد کلاس فرزند باید با همان نام اعلام شود و متد انتزاعی والد را دوباره تعریف کند.
  • متد کلاس فرزند باید با همان سطح دسترسی یا سطح دسترسی کمتر تعریف شود.
  • تعداد آرگومان‌های لازم باید یکسان باشد. با این حال، کلاس فرزند می‌تواند آرگومان‌های اختیاری اضافی داشته باشد.

مثال

<?php
// کلاس والد
abstract class Car {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function intro() : string;
}
// کلاس‌های فرزند
class Audi extends Car {
  public function intro() : string {
    return "Choose German quality! I'm an $this->name!";
  }
}
class Volvo extends Car {
  public function intro() : string {
    return "Proud to be Swedish! I'm a $this->name!";
  }
}
class Citroen extends Car {
  public function intro() : string {
    return "French extravagance! I'm a $this->name!";
  }
}
// ایجاد اشیاء از کلاس‌های فرزند
$audi = new Audi("Audi");
echo $audi->intro();
echo "<br>";
$volvo = new Volvo("Volvo");
echo $volvo->intro();
echo "<br>";
$citroen = new Citroen("Citroen");
echo $citroen->intro();
?>

توضیحات مثال

کلاس‌های Audi، Volvo و Citroen از کلاس Car به ارث برده‌اند. این بدین معنی است که کلاس‌های Audi، Volvo و Citroen می‌توانند از ویژگی عمومی $name و متد عمومی __construct() کلاس Car استفاده کنند به دلیل ارث‌بری.

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

مثال‌های بیشتر از کلاس انتزاعی

مثال با آرگومان

<?php
abstract class ParentClass {
  // متد انتزاعی با یک آرگومان
  abstract protected function prefixName($name);
}
class ChildClass extends ParentClass {
  public function prefixName($name) {
    if ($name == "John Doe") {
      $prefix = "Mr.";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs.";
    } else {
      $prefix = "";
    }
    return "{$prefix} {$name}";
  }
}
$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>

مثال با آرگومان‌های اختیاری

<?php
abstract class ParentClass {
  // متد انتزاعی با یک آرگومان
  abstract protected function prefixName($name);
}
class ChildClass extends ParentClass {
  // کلاس فرزند ممکن است آرگومان‌های اختیاری تعریف کند که در متد انتزاعی والد نیستند
  public function prefixName($name, $separator = ".", $greet = "Dear") {
    if ($name == "John Doe") {
      $prefix = "Mr";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs";
    } else {
      $prefix = "";
    }
    return "{$greet} {$prefix}{$separator} {$name}";
  }
}
$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>

نکات کلیدی

  • اطمینان از پیاده‌سازی متدهای خاص در آن‌ها استفاده می‌شوند.
  • متدهای انتزاعی فقط اعلام می‌شوند و پیاده‌سازی نمی‌شوند؛ کلاس‌های فرزند باید آن‌ها را پیاده‌سازی کنند.
  • کلاس‌های انتزاعی می‌توانند دارای متدهای معمولی (غیر انتزاعی) باشند که در کلاس‌های فرزند نیز به ارث برده می‌شوند.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
JavaScript - رویدادها (Events)

JavaScript – رویدادها (Events)

رویدادهای HTML رویدادها در HTML، “اتفاقاتی” هستند که برای عناصر HTML رخ می‌دهند. این اتفاقات می‌توانند ناشی از کار...

بیشتر بخوانید
JavaScript - سازنده‌های شیء (Object Constructors)

JavaScript – سازنده‌های شیء (Object Constructors)

ساخت آبجکت با تابع سازنده (Object Constructor Function) برای ساخت چندین آبجکت مشابه، از تابع سازنده استفاده می‌شود. این...

بیشتر بخوانید
JavaScript - نمایش شیء (Object Display)

JavaScript – نمایش شیء (Object Display)

نحوه نمایش آبجکت‌ها در جاوااسکریپت هنگام نمایش یک آبجکت جاوااسکریپت به صورت مستقیم، خروجی معمولاً به شکل [object Object]...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.