有人可以解释当 php 类被序列化时方法会发生什么吗?当我转储或序列化类时,我在输出中看不到它们,并且在创建实例后,从字符串序列化时,对该方法的引用(?)似乎可用。
这是给出令人惊讶的输出的代码:
class ticket {
public $film="Killer bananas 3";
public function invalidate(){
echo '*punch*';
}
}
$myticket = new ticket();
var_dump($myticket);
var_dump(serialize($myticket));
echo "output #1: ";
echo $myticket->invalidate().PHP_EOL;
$temp = serialize($myticket);
$newticket = unserialize($temp);
echo "output #2: ";
echo $newticket->invalidate().PHP_EOL;
$ticketfromstring = unserialize('O:6:"ticket":1:{s:4:"film";s:28:"Attack of the killer bananas";}');
echo "output #3: ";
echo $ticketfromstring->invalidate().PHP_EOL;
输出:
me@box:~# php -f /home/ekomi/includes/classes/class.test.php
object(ticket)#1 (1) {
["film"]=>
string(16) "Killer bananas 3"
}
string(52) "O:6:"ticket":1:{s:4:"film";s:16:"Killer bananas 3";}"
output #1: *punch*
output #2: *punch*
output #3: *punch*
这种行为很奇怪(尤其是最后一个!)
请注意,我已经测试了 json_encode 并且它只提供属性(即使 JSON 可以包含一个函数)并在尝试调用该方法时引发错误。