2010-08-14 3 views
1

Может кто-нибудь объяснить мне, почему в сеансе в этом случае мы получаем объект с ?Сериализация объектов и фатальная ошибка

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. объект сессии (в сессии файл) с собственности (не удалось)

+0

Ваш вопрос непонятен. Что вы ожидаете? – Sarfraz

+0

@Sarfraz: извините. вопрос обновлен – zerkms

+0

Я буду исследовать после обеда, но ваши сценарии действительно не должны поднимать фатальные ошибки (кстати, обработчик ошибок не обрабатывает смертельные случаи) – Artefacto

ответ

0

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

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

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

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

+0

Я заполнил ошибку http://bugs.php.net/bug.php?id = 52604. «Я думаю, что это правильный подход» - это ломает мои данные, и это определенно не то, что я ожидаю. я ожидаю, что мои данные будут в безопасности ;-) – zerkms

+0

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

Смежные вопросы