我试图使以下类与本地PHP序列化兼容,特别是在PHP8.1上运行时。
class SerializableDomDocument extends DOMDocument
{
private $xmlData;
public function __sleep(): array
{
$this->xmlData = $this->saveXML();
return ['xmlData'];
}
public function __wakeup(): void
{
$this->loadXML($this->xmlData);
}
}在较低的PHP版本中,这一切都很好,但只要尝试将这样的对象传递给serialize()函数,就会产生8.1。下面是生成这样一个异常的代码示例:https://3v4l.org/m8sgc。
我知道PHP7.4中引入了__serialize() / __unserialize()方法,但使用它们似乎也无济于事。下面的代码将产生与此处所观察到的相同的异常:https://3v4l.org/ZU0P3。
class SerializableDomDocument extends DOMDocument
{
public function __serialize(): array
{
return ['xmlData' => $this->saveXML()];
}
public function __unserialize(array $data): void
{
$this->loadXML($data['xmlData']);
}
}我对这个问题感到很困惑,希望能得到任何提示。目前看来,唯一的前进方向是引入一个显式的规范化/去定向器,这将导致代码库API的急剧变化。我想避免那样做。
发布于 2022-07-13 10:43:36
发布于 2022-07-13 10:20:00
这似乎与您的DOMDocument中的无效方法或无效的XML内容有关。如果您不使用它,这只是一个很好的https://3v4l.org/K91Vv。
https://stackoverflow.com/questions/72964347
复制相似问题