谁能解释我,为什么在这种情况下,我们会得到对象 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 财产 (失败的)

有帮助吗?

解决方案

原因是致命错误是 致命的 到发动机。之后,引擎无法再调用功能。

因此,在 php_var_serialize_intern拨电至 __sleep 失败。如您所见,您不需要致命错误 __sleep 有例外,或者没有 __sleep 回调,行为将是相似的。

特别是,行为是检索变量的所有实例属性,并序列化结果的哈希表,就好像它属于数组一样。

我认为这是一种有效的方法,但也许您认为如果要求 __sleep 失败,序列化应该只是失败。你可以尝试 提交功能请求.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top