شی گرایی در PHP بخش هشتم :‌ متد های جادویی

%d8%b4%db%8c-%da%af%d8%b1%d8%a7%db%8c%db%8c-%d8%af%d8%b1-php-%d8%a8%d8%ae%d8%b4-%d9%87%d8%b4%d8%aa%d9%85-%d9%85%d8%aa%d8%af-%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-wpmen

در بخش قبلی در خصوص ثابت ها در شی گرایی مطالبی را ارایه کردیم در این بخش می خواهیم در خصوص متدهای پیش فرض موجود در شی گرایی در PHP که به متد های جادویی معروف می باشند صحبت کنیم با مردان وردپرس همراه باشید .

در php  تعدادی متد وجود دارند که به آنها متد های جادویی ( Magic Methods ) میگویند. این متد ها با دو خط زیر دار __ شروع  می شوند و هرکدام کار خاصی را انجام می دهند. این متد ها برای برنامه نویسان بسیار مفید می باشند و در اکثر مواقع از آنها استفاده می کنند. علت بوجود آمدن متدهای جادویی این بوده تا برنامه نویسان پی اچ پی راحت تر بتوانند اقدام به ساخت اشیاء از روی کلاس ها کنند.

نکته: نمی توانید از نام این متد ها برای متد های خود استفاده کنید.

در زیر لیست متد های جادویی را نمایش می دهیم و توضیح مختصری راجع به هرکدام می دهیم:

  • construct
  • destruct
  • set
  • get
  • clone
  • toString

در زیر به هرکدام از این متدها جداگانه خواهیم پرداخت.

متد سازنده کلاس construct

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

<?php 
class User{

function __construct(){
echo 'wpmen.ir';
}
}

$User = new User();
// output : wpmen.ir 


 


متد مخرب و یا destruct

این متد برعکس  متد construct__ عمل میکند. یعنی هنگامی که کلاس میخواد از حافظه خارج شود این متد اجرا میشه.

class User{

function __destruct(){
echo "Goodbye ";
}
}

$User = new User();
unset($User); 

 


Overloading در PHP

در PHP واژه Overloading به معنی ایجاد متدها و متغیرهای داینامیک استفاده می شود. این متدها و متغیرها به وسیله متدهای جادویی یا Magic Methods ساخته میشوند.

ساخت متغیرهای داینامیک در PHP

متد set 

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

class User

{

private $vars = array() ;

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() ;

function __set($name , $value){
$this->vars[$name] = $value ;
}

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 یعنی رونوشت از مرجع می باشد.

 

<?php
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;

    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  گرفته شود خطا حاصل خواهد شد .

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

بخش بعدی در خصوص Autoload ها صحبت خواهیم کرد.

منبع :‌ مردان وردپرس

تاریخ آخرین بروزرسانی : ۱۳ دی ۱۳۹۵
میلاد میلادی

باور هایت را که پرورش دهی به هرچیزی دست خواهی یافت.

ارسال نظر

آدرس الکترونیکی شما نمایش داده نمی شود *

Time limit is exhausted. Please reload CAPTCHA.