__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 協議》,轉載必須註明作者和本文連結