متد های جادویی php

ترجمه و تالیف : پشتیبانی راکت
تاریخ انتشار : 13 خرداد 98
خواندن در 2 دقیقه
دسته بندی ها : پی اچ پی

در 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/ مشاهده نمایید.

گردآوری و تالیف پشتیبانی راکت
آفلاین
user-avatar

باور ما اینست که کاربران ایرانی لایق بهترین‌ها هستند، از این رو ما تمام تلاش خود را می‌کنیم تا بتوانیم فیلم‌ها و مقالات آموزشی بروز و کاربردی را در اختیارتان قرار دهیم تا با استفاده از آنها بتوانید جزء بهترین‌ها در صنعت طراحی و برنامه‌نویسی وب شوید. ما ادعا نمی‌کنیم که بهترین هستیم ولی همیشه تمام تلاش خود را می‌کنیم بهترین عملکرد را به شما ارائه دهیم.

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید