کلاس بی نام (Anonymous Class)

یکی از قابلیت های جدید در php 7، کلاس های بی نام یا همان Anonymous Classes هستند. به کلاسی که نام نداشته باشد، کلاس بی نام یا Anonymous Class گفته می شود. از این کلاس ها برای Override کردن متد یک کلاس یا یک رابط (interface) استفاده می شود. نحوه تعریف کلاس های بی نام به صورت زیر است :

$AnonymousClass = new class
{

};

همانطور که احتمالا از کد بالا متوجه شده اید، تعریف و ایجاد شیء از این نوع کلاس ها به صورت همزمان می باشد. به این نکته هم توجه کنید که بعد از مساوی دو کلمه new class و بعد از علامت آکولاد بسته از علامت سمیکالن (;) استفاده می شود. همانطور که در درس زیر ذکر شد، برای پیاده سازی یا Override یک متد از کلاس پایه توسط کلاس فرزند باید دو کلاس ایجاد شود که یکی از دیگری ارث بری کند :

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

  1: <?php
  2:     class ParentClass
  3:     {
  4:         public function ShowMessage()
  5:         {
  6:             echo "Message from ParentClass.<br/>";
  7:         }
  8:     }
  9: 
 10:     $AnonymousClass = new class extends ParentClass
 11:     {
 12:         public function ShowMessage()
 13:         {
 14:             echo "Message from Anonymous Class.<br/>";
 15:         }
 16:     };
 17: 
 18:     $AnonymousClass -> ShowMessage();
 19: ?>
Message from Anonymous Class.

در کد بالا، یک کلاس تعریف شده است(خطوط 8-2) که دارای یک متد می باشد(7-4). این متد را به وسیله کلاس بی نام (16-10) Override کرده ایم (15-12). این کلاس ها به راحتی از کلاس های دیگر ارث بری کرده و می توانند رابطها را پیاده سازی و از trait هم استفاده کنند:

$anonymousClass =  new class extends MyClass implements MyInterface
{
    use MyTrait;
};

کلاس های بی نام نمی توانند به متدها و خاصیت های private یا protected کلاسی که از آن ارث بری کرده اند، دسترسی یابند.