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 回答