我的__sleep()
功能存在问题。
这是我正在使用的代码。如果我从类中删除__sleep()
函数,那么一切都按预期工作。
class Test {
private $name;
function setName($value){
$this->name = $value;
}
function getName(){
return $this->name;
}
/* Works good without this function */
public function __sleep() {
echo 'Sleep';
}
}
$obj = new Test;
$obj->setName('Juris');
apc_store('test', $obj);
$objAPC = apc_fetch('test');
// Output = Juris
echo $obj->getName();
// No output and "Call to a member function getName() on a non-object" if __sleep() function is in class. Otherwise output = Juris
echo $objAPC->getName();
为什么这段代码不起作用?使用APC和__sleep()
是否有任何限制?
PHP版本:5.3.14
APC版本:3.1.10
更新回复:
如果我将__sleep()
功能更改为此
public function __sleep() {
return array('name');
}
答案 0 :(得分:2)
magic __sleep()方法必须返回一个应该序列化的属性名称数组,你什么也不返回。
引自manual(我的重点):
它可以清理对象,应该返回一个数组 应该序列化的该对象的所有变量的名称。如果 该方法不返回任何内容,然后NULL被序列化 发布了E_NOTICE。