PHP __sleep()无法与APC一起使用

时间:2012-10-01 12:49:04

标签: php object apc

我的__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');
}

1 个答案:

答案 0 :(得分:2)

magic __sleep()方法必须返回一个应该序列化的属性名称数组,你什么也不返回。

引自manual(我的重点):

  

它可以清理对象,应该返回一个数组   应该序列化的该对象的所有变量的名称。如果   该方法不返回任何内容,然后NULL被序列化   发布了E_NOTICE。