3

PHPのオブジェクトがセッションに保存されている場合、そのメソッドはいつ呼び出されますか$_SESSION__destructマニュアルで明確な答えを見つけることができませんでした。スクリプト実行の最後に自動的に呼び出されると言っている__destructので、に存在するかどうかに関係なく呼び出されることを期待してい$_SESSIONます。

__destructこれは、セッション内のオブジェクトに対するすべてのリクエストで呼び出される可能性があることを意味しますか?

追加:オブジェクトは前または後にシリアル化され__destructますか?変更__destructは次のリクエストに反映されますか?

4

2 に答える 2

3

オブジェクトを実際にセッションに保存するのではなく、文字列としてシリアル化して保存します。__sleep次に、オブジェクトのマジックと__wakeupメソッドをオーバーライドできます。__sleepオブジェクトが__wakeupシリアル化されたときに呼び出され、オブジェクトのシリアル化を解除しようとしたときに呼び出されます。

詳細については、以下を参照してください。

__sleepおよび__wakeupのマニュアルドキュメント

シリアル化されたオブジェクトをセッションに保存するためのマニュアルドキュメント

于 2012-06-22T18:02:38.650 に答える
0

__constructそして__destruct、そのオブジェクトのインスタンスでスクリプトが実行されるたびに呼び出されます。オブジェクトをセッションに配置した場合、そのオブジェクトはページビュー全体で同じ値を保持せず、単なるオブジェクトです。これを示す簡単な例を書きました。

class MyClass{
    var $myVar=1;
    function __construct(){
        $this->myVar++;
    }
    function __destruct(){
        echo "destruct";
    }
}
session_start();
$_SESSION['object']=new MyClass;
echo $_SESSION['object']->myVar;

これの出力は次のとおりです。

destruct2destruct

この部分は私に小さなループを投げかけます、そして私が間違っているならそこにいる誰かが私を訂正してくれることを願っています。 __destruct()オブジェクトが作成され、セッションに配置されるときに破棄されるため、は2回呼び出されています。エコーアウトする$_SESSION['object']->myVarとオブジェクトが再開され、その後破棄されます。

コードを変更し、スクリプトを取り出し$_SESSION['object']=new MyClass;て再実行すると、次のようになります。

2破壊する

この場合も、オブジェクトが呼び出されるとオブジェクトは破棄され、関数の実行が終了します。基本的に、オブジェクトをセッションに格納する場合は、オブジェクトにアクセスするたびにオブジェクトが破棄されることを期待してください。

于 2012-06-22T18:04:46.040 に答える