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 - آرایه‌ها (Arrays)

JavaScript – آرایه‌ها (Arrays)

آرایه در جاوااسکریپت متغیری خاص است که می‌تواند بیش از یک مقدار را ذخیره کند. const cars = ["Saab",...

بیشتر بخوانید
JavaScript - ویژگی‌های عدد (Number Properties)

JavaScript – ویژگی‌های عدد (Number Properties)

در جاوااسکریپت، شیء Number شامل ویژگی‌هایی از پیش تعریف‌شده است که برای کار با اعداد مفید هستند. این ویژگی‌ها...

بیشتر بخوانید
JavaScript - متدهای عدد (Number Methods)

JavaScript – متدهای عدد (Number Methods)

در جاوا اسکریپت، متدهایی برای کار با اعداد ارائه شده‌اند که می‌توانند روی تمامی اعداد استفاده شوند. متدهای مربوط...

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

نظرات

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

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