در php تعدادی متد وجود دارند که به آنها متد های جادویی ( Magic Methods ) میگویند. این متد ها با دو خط زیر دار __ شروع می شوند و هرکدام کار خاصی را انجام می دهند. این متد ها برای برنامه نویسان بسیار مفید می باشند و در اکثر مواقع از آنها استفاده می کنند. علت بوجود آمدن متدهای جادویی این بوده تا برنامه نویسان پی اچ پی راحت تر بتوانند اقدام به ساخت اشیاء از روی کلاس ها کنند.
نکته: متد ها مانند توابع هستند پس بدیهی است نمی توانید از نام این متد ها برای متد های خود استفاده کنید.
در زیر لیست متد های جادویی را نمایش می دهیم و توضیح مختصری راجع به هرکدام می دهیم:
- construct
- destruct
- set
- get
- clone
- toString
- ...
در زیر به هرکدام از این متدها جداگانه خواهیم پرداخت:
متد سازنده کلاس construct
این متد هنگام ساخته شدن یک نمونه جدید از کلاس اجرا خواهد شد. این متد بدون نیاز به فراخوانی به صورت خودکار هنگام ایجاد یک شی جدید ، اجرا خواهد شد و دستورات داخل آن هم عملی می شوند
class User{
public function __construct(){
echo 'wpmen.ir';
}
}
$User = new User();
// output : wpmen.ir
متد مخرب و یا destruct
این متد برعکس متد construct__ عمل میکند. یعنی هنگامی که کلاس میخواد از حافظه خارج شود این متد اجرا میشه.
class User{
public function __destruct(){
echo "Goodbye ";
}
}
$User = new User();
unset($User);
Overloading در PHP
در PHP واژه Overloading به معنی ایجاد متدها و متغیرهای داینامیک استفاده می شود. این متدها و متغیرها به وسیله متدهای جادویی یا Magic Methods ساخته میشوند.
ساخت متغیرهای داینامیک در PHP
متد set
از این متد برای ایجاد متغیرهای داینامیک استفاده می کنیم. متغیرهایی که یا داخل کلاس وجود ندارند یا متغیرهایی که در خارج از کلاس بهشون دسترسی نداریم.
class User
{
private $vars = array() ;
public function __set($name , $value){
$this->vars[$name] = $value ;
}
}
$car = new User();
$car->Name = 'milad' ;
$car ->LastName = 'miliadi';
$car->age = 27;
متد get
از این متد برای دریافت و دسترسی property ها و یا متغیر های داینامیکی که توسط متد set ساخته شده اند استفاده می شود، یعنی برای صدا زدن متغیر ها و property هایی که در کلاس مورد نظر وجود نداشته و یا قابل دسترس نیستند.
class User
{
private $vars = array() ;
public function __set($name , $value){
$this->vars[$name] = $value ;
}
public function __get($name){
return $this->vars[$name];
}
}
$user= new User();
//set values
$User->name = 'milad' ;
$User->lastname = 'miladi';
$User->age = 27;
// Get values
echo $User->age ;
متد clone
در php وقتی از یک آبجکت کپی می کنیم، این کپی به اصطلاح copy by reference است یعنی وقتی تغییری را در آبجکت اصلی اعمال کنید در کپی ها هم اعمال می شود .
به وسیله این متد می توان از یک شی ( object ) نسخه رو نوشت ( copy ) تهیه کرد ، به منظور اینکه وقتی در شی ( object ) اصلی تغییری ایجاد شد،در نسخه های کپی هم اعمال شود که به اصطلاح به آن copy by reference یعنی رونوشت از مرجع می باشد.
class SubObject
{
static $instances = 0;
public $instance;
public function __construct() {
$this->instance = ++self::$instances;
}
public function __clone() {
$this->instance = ++self::$instances;
}
}
class MyCloneable
{
public $object1;
public $object2;
public function __clone()
{
// Force a copy of this->object, otherwise
// it will point to same object.
$this->object1 = clone $this->object1;
}
}
$obj = new MyCloneable();
$obj->object1 = new SubObject();
$obj->object2 = new SubObject();
$obj2 = clone $obj;
print("Original Object:\n");
print_r($obj);
print("Cloned Object:\n");
print_r($obj2);
متد toString
متد toString به یک کلاس امکان تصمیم گیری درباره چگونگی رفتار در تبدیل به یک رشته را میدهد. این متد زمانی فراخوانی می شود که آبجکت ایجاد شده از کلاس echo شود . در حالت معمولی اگر یه آبجکت از کلاس ساخته و از آن echo گرفته شود خطا حاصل خواهد شد .
// Declare a simple class
class TestClass
{
public $foo;
public function __construct($foo)
{
$this->foo = $foo;
}
public function __toString()
{
return $this->foo;
}
}
$class = new TestClass('Hello');
echo $class;
در php متد های جادویی بیشتری وجود دارند که می توانید در صورت نیاز آن ها را در مرجع اصلی PHP به آدرس http://php.net/ مشاهده نمایید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید