parent و self

parent و self در PHP دو کلمه کلیدی هستند که کدنویسی را در زمان نوشتن برنامه های شیء گرا راحت می کنند. از کلمه کلیدی parent برای دسترسی به سازنده و متدهای کلاس والد و از کلمه کلیدی self برای دسترسی به کلاس جاری و استفاده از اعضا و متدهای استاتیک و همچنین ثابت های کلاس استفاده می شود. نحوه استفاده از این دو کلمه برای دسترسی به اعضا و متدها به صورت زیر است :

parent :: class member
self :: class member

یعنی مثلا اگر بخواهیم از یک ثابت در یک کلاس استفاده کنیم کافیست کلمه self و بعد از آن دو نقطه و سپس نام ثابت را بنویسیم. در کد زیر نحوه استفاده از این دو کلمه کلیدی آمده است :

   1: <?php
   2:     class ParentClass 
   3:     {
   4:         const NAME = "ParentClass";
   5:         function __construct()
   6:         {
   7:             echo "In " . self::NAME . " constructor" . "<br/>";
   8:         }
   9:     }
  10:     
  11:     class Child extends ParentClass 
  12:     {
  13:         const NAME = "Child";
  14:         function __construct()
  15:         {
  16:             parent::__construct();
  17:             echo "In " . self::NAME . " constructor" . "<br/>";
  18:         }
  19:     }
  20:     
  21:     $child = new Child();
  22: ?>
In ParentClass constructor
In Child constructor

همانطور که احتمالا متوجه شده اید برای دسترسی به اعضا، متدها و ثابت ها بعد از این دو کلمه کلیدی علامت دو نقطه (::) می گذاریم. کلمه کلیدی self در خط 7 به کلاس ParentClass و در خط 17 به کلاس Child اشاره دارد. در همین دو خط علامت دو نقطه و سپس نام ثابت های این دو کلاس یعنی NAME را نوشته ایم و این بدین معنی است که می خواهیم از این ثابت ها استفاده کنیم. در خط 16 برای اینکه از تمام کدهای سازنده کلاس پدر استفاده کنیم، به راحتی کلمه parent و بعد دو نقطه و در نهایت نام سازنده یعنی ()constract__ را می نویسیم. این کار باعث می شود تمام کدهای موجود در سازنده کلاس پدر در داخل کلاس فرزند اجرا شوند. برای همین است که وقتی یک شیء از کلاس فرزند ایجاد می کنیم کدهای سازنده کلاس پدر (خط 7) اجرا می شوند.

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر مطرح بفرمایید.

  1. مرتضی پاسخ دادن

    بسیار خلاصه و مفید. با تشکر فراوان

    • یونس ابراهیمی پاسخ دادن

      خواهش می کنم، لطف دارین