首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP8.1 DOMDocument序列化

PHP8.1 DOMDocument序列化
EN

Stack Overflow用户
提问于 2022-07-13 09:57:35
回答 2查看 327关注 0票数 1

我试图使以下类与本地PHP序列化兼容,特别是在PHP8.1上运行时。

代码语言:javascript
复制
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

代码语言:javascript
复制
class SerializableDomDocument extends DOMDocument
{
    public function __serialize(): array
    {
        return ['xmlData' => $this->saveXML()];
    }

    public function __unserialize(array $data): void
    {
        $this->loadXML($data['xmlData']);
    }
}

我对这个问题感到很困惑,希望能得到任何提示。目前看来,唯一的前进方向是引入一个显式的规范化/去定向器,这将导致代码库API的急剧变化。我想避免那样做。

EN

回答 2

Stack Overflow用户

发布于 2022-07-13 10:43:36

2021年8月10日,对8.1版RC1进行了此更改:

将DOM类标记为不可序列化

因此,您不能再序列化这些类。

票数 2
EN

Stack Overflow用户

发布于 2022-07-13 10:20:00

这似乎与您的DOMDocument中的无效方法或无效的XML内容有关。如果您不使用它,这只是一个很好的https://3v4l.org/K91Vv

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72964347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档