PHP中wwwxgb66com17l76934555set_state

wwwxgb66com17176934555發表於2021-07-24

__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, ))

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章