Maison  >  Questions et réponses  >  le corps du texte

Sérialisation DOMDocument en PHP 8.1

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粉891237912P粉891237912300 Il y a quelques jours529

répondre à tous(1)je répondrai

  • P粉041881924

    P粉0418819242024-01-17 09:46:33

    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.

    répondre
    0
  • Annulerrépondre