0

機能に問題があり__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');
}
4

1 に答える 1

2

魔法の__sleep()メソッドは、シリアル化する必要のあるプロパティ名の配列を返す必要があります。何も返されません。

マニュアルからの引用(私の強調):

オブジェクトをクリーンアップでき、シリアル化する必要があるそのオブジェクトのすべての変数の名前を含む配列を返すことになっています。メソッドが何も返さない場合は、NULLがシリアル化され、E_NOTICEが発行されます。

于 2012-10-01T12:52:05.347 に答える