Сериализация объектов и фатальной ошибки
-
28-09-2019 - |
Вопрос
Может ли кто-нибудь объяснить мне, почему на сессии в этом случае мы получаем объект с 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);
}
Уполномоченный: Здесь я ожидаю получить:
1. Фатальная ошибка (прошло)
2. Объект в сессии (в Файл сеанса) с 1 свойство (неуспешный)
Решение
Причина этого состоит в том, что фатальная ошибка, ну, ну, фатальный к двигателю. После этого двигатель не может позвонить больше функций.
Следовательно, в php_var_serialize_intern
то позвонить __sleep
не удается. Как видите, вам не нужна фатальная ошибка, если __sleep
бросил исключение, или если бы не было ни одного __sleep
Обратный вызов вообще, поведение будет похоже.
В частности, поведение состоит в том, чтобы извлечь все свойства экземпляра переменной и сериализовать полученный хеш-таблица, как если бы он принадлежал к массиву.
Я думаю, что это действительный подход, но, возможно, вы думаете, что если звонок __sleep
Не удается, сериализация должна просто потерпеть неудачу. Вы можете попробовать Отправить запрос на функцию.