1

この場合、セッションで2 つのプロパティを持つオブジェクトを取得するのはなぜですか?

set_error_handler('my_error_handler');

session_start();

$obj = new myclass();

$_SESSION['obj'] = $obj;

$a->b();

class myclass
{
    private $a = 1;
    private $b = 2;

    public function __sleep()
    {
        return array('a');
    }
}

function my_error_handler($code, $error, $file = NULL, $line = NULL)
{
    throw new ErrorException($error, $code, 0, $file, $line);
}

UPD:ここで私は得ると予想しています:
1.致命的なエラー(合格
2.セッション内のオブジェクト(セッションファイル内)と1つのプロパティ(失敗

4

1 に答える 1

0

その理由は、致命的なエラーはエンジンにとって致命的だからです。その後、エンジンは関数を呼び出すことができなくなります。

したがって、へphp_var_serialize_intern呼び出しで__sleep失敗します。ご覧のとおり__sleep、例外がスローされた場合、または__sleepコールバックがまったくない場合は、致命的なエラーは必要ありません。動作は同様です。

具体的には、変数のすべてのインスタンス プロパティを取得し、結果のハッシュ テーブルを配列に属しているかのようにシリアル化します。

これは有効なアプローチだと思いますが、呼び出しが__sleep失敗した場合、シリアル化は失敗するはずだと思うかもしれません。機能リクエストを送信してみることができます。

于 2010-08-14T15:03:40.210 に答える