آموزش استفاده از ثابت ها و متدهای آماده در PHP


آموزش استفاده از ثوابت و متدهای آماده / magic constants & methods در برنامه نویسی شی گرا PHP

magic method ها توابعی هستند که اسم آن ها با دو زیرخط آغاز شده و به هنگام اتفاق افتادن رخدادهای خاص به صورت خودکار صدا خورده و اجرا می شوند. متدهای مزبور یک امکان در php هستند که به منظور ساخت آسان آبجکت از روی کلاس تعبیه شدند.

همچنین در PHP تعدادی ثابت به صورت پیش فرض تعریف شده که توسعه دهنده می تواند از مقادیر آن در بخش های مختلف پروژه استفاده کند. از این ثوابت که اسم آن ها بین دو زیر خط محصور شده، تحت عنوان magic constants یاد می شود.

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

  1. کاهش خوانایی کد
  2. کاهش سرعت اجرا

در خصوص استفاده از magic method ها اختلاف زیادی وجود دارد، به همین جهت در آموزش حاضر به شرح آن بخش هایی از این عرصه که مورد تایید همگانی قرار گرفته پرداخته و آن قسمت هایی که توصیه نمی شود را نادیده می گیریم.

آنچه خواهید آموخت:

  • کاربرد متد __construct() در PHP.
  • یک متد سازنده (Constructor) بدون احتمال رخداد خطا در کد بنویسید.
  • استفاده از ثوابت ویژه (magic constant) در PHP.

شرح کاربرد متد __construct()

همان طور که در بالا نیز ذکر شد، اسم magic method ها همیشه با دو زیر خط آغاز شده و متد __construct() از این قاعده مستثنی نیست. از این متد زمانی استفاده می کنیم که بخواهیم به هنگام ساخت آبجکت از روی کلاس، عملیات خاصی انجام شود. چنین متدی در اصطلاح یک تابع سازنده یا مقداردهنده ی اولیه (constructor) خوانده می شود. معمولا توسعه دهنده از این متد جهت تخصیص مقدار معینی به property استفاده می کند. در مثال ساده ی این آموزش، قصد داریم تا به هنگام ساخت آبجکت از روی کلاس، بلافاصله متغیر $model را مقداردهی کنیم. در این راستا یک متد سازنده (constructor) داخل کلاس اعلان کرده که property نام برده را به مجرد ایجاد نمونه از کلاس، مقداردهی می کند.

class Car{    private $model;    // A constructor method.    public function __construct($model)    {      $this -> model = $model;    }  }  

در صورت استفاده از تابع سازنده (constructor)، لازم است یک آرگومان با اسم مدل مورد نظر به هنگام ساخت آبجکت به این تابع کلاس ارسال کرد. چنانچه به هنگام ساخت آبجکت از روی کلاس، مقدار مورد نیاز تابع سازنده را در اختیار آن قرار ندهیم، به طور قطع با خطا مواجه خواهیم شد.

$car1 = new Car();

خروجی:

                              Warning: Missing argument 1 for Car::__construct()  

به منظور از جلوگیری از این رخداد، باید یک مقدار به تابع سازنده ارسال شود. بنابراین، برای اینکه در اجرای کد جاری با خطا مواجه نشویم، یک مقدار به عنوان آرگومان (“Mercedes”) به تابع سازنده ی کلاس Car() ارسال می کنیم.

$car1 = new Car("Mercedes");

حال متد getCarModel() را جهت چاپ مدل ماشین آبجکتی که به تازگی از روی کلاس خود ایجاد کردیم، اعلان و پیاده سازی می کنیم.

class Car {    private $model;    //__construct    public function __construct ($model)    {      $this -> model = $model;    }     public function getCarModel()    {      return ' The car model is: ' . $this -> model;    }  }  //We pass the value of the variable once we create the object  $car1 = new Car("Mercedes");  echo $car1 -> getCarModel();  

خروجی:

The car model is: Mercedes.

افزودن یک تابع سازنده به اسکریپت بدون رخداد خطا در کد

به هنگام ایجاد یک آبجکت از روی کلاس که دارای تابع سازنده است، اگر مقداری به عنوان آرگومان به این تابع فرستاده نشود، کد اپلیکیشن ما با خطای مهلک مواجه می شود. جهت جلوگیری از این رخداد، می توانیم یک مقدار پیش فرض در property هایی که مایلیم آن ها را از طریق تابع سازنده (constructor) مقداردهی کنیم، تنظیم نماییم. مقدار پیش فرض بهترین گزینه برای قرار دادن در property می باشد و این مقدار می تواند 0، رشته ی تهی یا null باشد.

اگر از مقدار null به عنوان مقدار پیش فرض استفاده کنیم، در آن صورت می توان از یک شرط جهت بررسی اینکه مقداری به تابع سازنده ارسال شده یا خیر بهره گرفت و سپس اگر مقداری به تابع سازنده ارسال شده بود، این مقدار را در property قرار دهیم و در غیر این صورت مقدار این property طبق انتظار “N/A” خواهد بود. مثال:

class Car {    // The $model property has a default value of "N/A"    private $model = "N/A";    // We don’t have to assign a value to the $model property    //since it already has a default value    public function __construct($model = null)    {      // Only if the model value is passed it will be assigned      if($model)       {         $this -> model = $model;      }    }      public function getCarModel()    {      return ' The car model is: ' . $this -> model;    }  }  //We create the new Car object without passing a value to the model  $car1 = new Car();  echo $car1 -> getCarModel();  

همان طور که می بینید، یک آبجکت از روی کلاس ایجاد کردیم بدون اینکه مقداری به model ارسال شود، با این حال هیچ خطایی در اجرای اسکریپت PHP رخ نداده است چراکه property نام برده دارای مقدار پیش فرض null می باشد.

خروجی:

The car model is: N/A

اما در نمونه ی زیر، به مجرد اینکه آبجکت از روی کلاس ایجاد می کنیم، مقدار model را به تابع سازنده پاس می دهیم. در مثال جاری، ما به محض ساخت اّجکت از روی کلاس، مقدار “Merceds” را به متغیر $model تخصیص می دهیم.

class Car {    private $model = '';    //__construct    public function __construct($model = null)    {      if($model)       {         $this -> model = $model;      }    }    public function getCarModel()    {      return ' The car model is: ' . $this -> model;    }  }  //We create the new Car object with the value of the model  $car1 = new Car('Mercedes');  echo $car1 -> getCarModel();  

خروجی:

The car model is: Mercedes

علاوه بر magic method ها، زبان PHP تعدادی زیادی ثوابت با مقادیر از پیش تعیین شده به نام magic constants در اختیار توسعه دهنده قرار می دهد.

به طور مثال، می توان با استفاده از ثابت __CLASS__ (مقادیر ثابت بین دو زیر خط محصور شده و با حروف بزرگ نوشته شده است) اسم کلاس میزبان (ثابت مورد نظر) را بازیابی کرد.

در نمونه ی زیر با استفاده از ثابت ذکر شده در بدنه ی تابع getCarModel()، اسم کلاس میزبان که نقش ظرف را برای magic constant ایفا می کند، بازیابی می کنیم.

class Car {    private $model = '';    //__construct    public function __construct($model = null)    {      if($model)       {         $this -> model = $model;      }    }    public function getCarModel()    {      //We use the __CLASS__ magic constant in order to get the class name      return " The " . __CLASS__ . " model is: " . $this -> model;    }  $car1 = new Car('Mercedes');  echo $car1 -> getCarModel();  

خروجی:

                              TheCarmodel is: Mercedes  

در زیر به تعدادی دیگر از ثوابت ویژه ی PHP که می توانند کارا باشند، اشاره خواهیم کرد:

  • ثابت __LINE__ جهت بازیابی شماره یا اندیس خطی که magic constant جاری در آن استفاده شده بکار گرفته می شود.
  • ثابت __FILE__ به منظور واکشی آدرس (full path) یا اسم کامل فایلی که magic constant حاضر در آن مورد استفاده قرار گرفته بکار می رود.
  • ثابت __METHOD__ به منظور بازیابی اسم متدی که constant مورد نظر در آن بکار رفته است، مورد استفاده قرار می گیرد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *