PHP 8.1中DOMDocument序列化
P粉891237912
P粉891237912 2024-01-16 11:19:03
0
1
552

我正在尝试使以下类与本机 PHP 序列化兼容,特别是在 PHP 8.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 版本上一切都很好,但 8.1 会产生 未捕获的异常:'SerializedDomDocument' 的序列化不允许 每当尝试将此类对象传递给 serialize() 函数时。以下是会产生此类异常的代码示例:https://3v4l.org/m8sgc。

我知道 PHP 7.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 发生重大变化。我想避免这种情况。

P粉891237912
P粉891237912

全部回复(1)
P粉041881924

2021 年 8 月 10 日,此更改已提交到版本 8.1 RC1:

将 DOM 类标记为不可序列化

因此您无法再序列化这些类。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板