Я попытался нециализировать объект PHP.
Предупреждение: unserialize () [function.unserialize]: Узел больше не существует в /var/www/app.php в строке 42
Но почему это случилось?
Даже если я нашел решение для unserialize объектов simplexml, его полезно знать, почему php не может не инициализировать объекты?
Для сериализации объекта simplexml я использую эту функцию
function serializeSimpleXML(SimpleXMLElement $xmlObj) { return serialize($xmlObj->asXML()); }
Для несериализации объекта simplexml objetc я использую эту функцию
function unserializeSimpleXML($str) { return simplexml_load_string(unserialize($str)); }
SimpleXMLElement обертывает тип ресурса libxml. Ресурсы не могут быть сериализованы. При следующем вызове ресурс, представляющий объект узла libxml, не существует, поэтому не выполняется инициализация. Возможно, это ошибка, когда вам разрешено сериализовать SimpleXMLElement.
Ваше решение является правильным, так как text / xml – правильный формат сериализации для любого XML. Однако, поскольку это всего лишь строка, на самом деле нет никакой причины для сериализации самой XML-строки.
Обратите внимание, что это не имеет ничего общего с «встроенными» классами / объектами PHP, но является детальностью реализации SimpleXML (и я думаю, что DOM в PHP 5).
просто присущий классу (основной класс xml был бы лучшим) в другом
и используйте __sleep для хранения данных, необходимых для инициализации simplexml (любого объекта)
и __wake для повторной инициализации объекта по мере необходимости
таким образом вы можете сериализовать (любой объект)
edit: помните, что этот класс должен быть доступен первым, это можно сделать, загрузив (включая) класс или __autoload