сериализованная строка содержит ссылку на класс, который не может быть создан - PullRequest
0 голосов
/ 15 ноября 2018

", если сериализованная строка содержит ссылку на класс, который не может быть создан (например, является абстрактным), PHP немедленно умрет с фатальной ошибкой. Если оператору unserialize () предшествует '@', чтобы избежать загромождения журналовс предупреждениями или уведомлениями не будет абсолютно никакой информации о том, почему скрипт перестал работать. Это стоило мне пару часов ... "

Я нашел это в руководстве по php и попробую проверить это, но это не такбросить фатальную ошибку, если кто-то может привести пример.

1 Ответ

0 голосов
/ 15 ноября 2018

Простой пример:

abstract class Foo {}
unserialize('O:3:"Foo":0:{}');

дает :

Fatal error: Uncaught Error: Cannot instantiate abstract class Foo in /in/A4TCW:4 Stack trace:
#0 /in/A4TCW(4): unserialize('O:3:"Foo":0:{}')
#1 {main}   thrown in /in/A4TCW on line 4

Не имеет значения, является ли это корневым объектом или его свойством:

abstract class Foo {}
class Bar extends Foo {}
unserialize('O:3:"Bar":1:{s:1:"a";O:3:"Foo":0:{}}');

вы получаете тот же результат :

Fatal error: Uncaught Error: Cannot instantiate abstract class Foo in /in/ZkdMk:5
Stack trace:
#0 /in/ZkdMk(5): unserialize('O:3:"Bar":1:{s:...')
#1 {main}
  thrown in /in/ZkdMk on line 5

Несериализация чего-то, что просто расширяет абстрактный класс, не является проблемой и не является вашей цитатойпредлагает.

abstract class Foo {}
class Bar extends Foo {}
unserialize('O:3:"Bar":0:{}');

отлично работает .

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