کلاسهای انتزاعی

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

abstract class className
{
    
}

به مثال زیر در مورد استفاده از کلاسهای انتزاعی توجه کنید :

   1: <?php
   2: 
   3: 	 abstract class Base
   4: 	 {
   5:        protected abstract function ShowMessage();
   6: 	 }
   7:   
   8: 	 class firstChild extends Base
   9: 	 {
  10:       protected function ShowMessage()
  11:       {
  12:          echo 'Hello World!';
  13:       }
  14: 	 }
  15:   
  16: 	 class secondChild extends Base
  17: 	 {
  18:       public function ShowMessage()
  19:       {
  20:          echo 'Hello IRAN!';
  21:       }
  22: 	 }
  23: 
  24: ?>

همانطور که در کد بالا مشاهده می‌کنید یک کلاس abstract (خطوط 6-3) که دارای یک متد abstract (خط 5) هم هست را تعریف کرده‌ایم. متد abstract فاقد بدنه است. این متدها توسط کلاس‌هایی که از کلاس abstract مشتق می‌شوند، پیاده سازی می‌شوند (اعضایی که با كلمه كلیدی abstract مشخص می‌شوند باید توسط کلاس‌های مشتق شده پیاده سازی شوند). در کد بالا دو کلاس firstChild (خطوط 14-8) و secondChild (خطوط 22-16) تعریف کرده‌ایم که به وسیله کلمه کلیدی extends از کلاس Base ارث بری کرده‌اند. هنگام ارث‌بری از یک کلاس انتزاعی تمام متدها انتزاعی باید در کلاس فرزند نیز تعریف شده باشند. علاوه بر این متدها باید دارای همان سطح دسترسی که در کلاس پایه تعریف شده است و یا سطح دسترسی بیشتری باشند. برای مثال کلاس پایه در کد بالا دارای متدی با سطح دسترسی protected است (خط 5)، حال ما این متد را یک بار در خط 10 به صورت protected و بار دیگر در خط 18 به صورت public تعریف کرده‌ایم و مشکلی پیش نیامده است. حال فرض کنید که سطح دسترسی این متد در کلاس پایه public باشد. در این صورت در کلاس‌های فرزند این متد فقط باید به صورت public تعریف شود، چون سطح دسترسی protected و private نسبت به public کمتر است. نمی‌توان از یک کلاس abstract نمونه ایجاد کرد ولی از کلاس‌هایی که از این نوع کلاس‌ها مشتق می‌شوند، می‌توان نمونه ایجاد کرد.