PHP中 __set_state()方法詳解

2020-07-16 10:05:39
__set_state(),呼叫var_export()匯出類時,此靜態方法會被呼叫。

作用:

自 PHP 5.1.0 起,當呼叫 var_export() 匯出類時,此靜態方法會被自動呼叫。

引數:

本方法的唯一引數是一個陣列,其中包含按 array('property' => value, ...) 格式排列的類屬性。

下面我們先來看看在沒有加 __set_state() 情況按下,程式碼及執行結果如何:

上程式碼:

<?php
class Person
{
    public $sex;
    public $name;
    public $age;
    public function __construct($name="",  $age=25, $sex='男')
    {
        $this->name = $name;
        $this->age  = $age;
        $this->sex  = $sex;
    }
}
$person = new Person('小明'); // 初始賦值
var_export($person);

看結果:

Person::__set_state(array( 'sex' => '男', 'name' => '小明', 'age' => 25, ))

很明顯,將物件中的屬性都列印出來了

加了 __set_state() 之後:

繼續上程式碼:

<?php
class Person
{
    public $sex;
    public $name;
    public $age;
    public function __construct($name="",  $age=25, $sex='男')
    {
        $this->name = $name;
        $this->age  = $age;
        $this->sex  = $sex;
    }
    public static function __set_state($an_array)
    {
        $a = new Person();
        $a->name = $an_array['name'];
        return $a;
    }
}
$person = new Person('小明'); // 初始賦值
$person->name = '小紅';
var_export($person);

繼續看結果:

Person::__set_state(array( 'sex' => '男', 'name' => '小紅', 'age' => 25, ))

以上就是PHP中 __set_state()方法詳解的詳細內容,更多請關注TW511.COM其它相關文章!