Сериализация объектов и фатальная ошибка - PullRequest
1 голос
/ 14 августа 2010

Может кто-нибудь объяснить мне, почему в сеансе в этом случае мы получаем объект с 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 : здесь я ожидаюget:
1. фатальная ошибка ( передано )
2. объект в сеансе (в файле сеанса ) со свойством 1 (не удалось )

1 Ответ

0 голосов
/ 14 августа 2010

Причина этого в том, что фатальная ошибка, ну, фатальная для двигателя.После этого движок больше не может вызывать функции.

Следовательно, в php_var_serialize_intern вызов __sleep завершается неудачно.Как видите, вам не нужна фатальная ошибка, если __sleep сгенерировал исключение или если вообще не было никакого обратного вызова __sleep, поведение было бы аналогичным.

Вв частности, поведение состоит в том, чтобы извлечь все свойства экземпляра переменной и сериализовать результирующую хеш-таблицу, как если бы она принадлежала массиву.

Я думаю, что это правильный подход, но, возможно, вы думаете, что есливызов __sleep завершается неудачно, сериализация должна быть просто неудачной.Вы можете попробовать отправить запрос на добавление .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...