Sérialisation DOMDocument en PHP 8.1
P粉891237912
P粉891237912 2024-01-16 11:19:03
0
1
544

J'essaie de rendre la classe suivante compatible avec la sérialisation PHP native, en particulier lors de l'exécution sur 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);
    }
}

Tout va bien sur les versions inférieures de PHP, mais la 8.1 produit des fonctions 未捕获的异常:'SerializedDomDocument' 的序列化不允许 每当尝试将此类对象传递给 serialize(). Voici un exemple de code qui générerait une telle exception : https://3v4l.org/m8sgc.

Je connais les méthodes __serialize() / __unserialize() introduites dans PHP 7.4, mais leur utilisation ne semble pas non plus aider. L'extrait de code suivant provoque la même exception observée ici : 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']);
    }
}

Je suis très confus à propos de ce problème et j'apprécierais vraiment tous les conseils. Pour le moment, il semble que la seule voie à suivre consiste à introduire des normaliseurs/dénormaliseurs explicites, ce qui entraînera des changements importants dans l'API de base de code. Je veux éviter cette situation.

P粉891237912
P粉891237912

répondre à tous(1)
P粉041881924

Le 10 août 2021, ce changement a été validé sur la version 8.1 RC1 :

Marquer les classes DOM comme non sérialisables

Vous ne pouvez donc plus sérialiser ces classes.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal