1

オブジェクト参照がセッションコンテナ($ _SESSION)に格納されると、オブジェクト参照はどうなりますか?

このプロセスでは、値がシリアル化されるときに、オブジェクト参照がコピーに変換されますか、それとも単に壊れますか?

session_start();
$testArrayA = [];
$testArrayB = [];    
$testArrayA["abc"] = &$testArrayB;
$testArrayB["def"] = "test2";
$_SESSION["myvalue"] = $testArrayA;

よろしくお願いします

4

1 に答える 1

1

セッションが書き込まれると、シリアル化されます。シリアル化は、データを読み取るだけなので、参照をまったく気にしません(参照から読み取る場合は、参照のターゲットを解決します)。

この動作は、最後の行を次のように変更することで確認できます。

var_dump(serialize($testArrayA));

string(44) "a:1:{s:3:"abc";a:1:{s:3:"def";s:5:"test2";}}"

それがセッションに保存されるものです。

オブジェクトが実装__sleepまたはSerializableインターフェースを実装している場合、そのシリアル化の動作は一意であることに注意してください。PDOこれは、シリアル化の動作をオーバーライドして、データベース接続参照を破棄すると思います。

于 2013-01-23T05:15:22.650 に答える