cari

Rumah  >  Soal Jawab  >  teks badan

DOMDocument bersiri dalam PHP 8.1

Saya cuba menjadikan kelas berikut serasi dengan pensirilan PHP asli, khususnya apabila berjalan pada 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);
    }
}

Semuanya baik pada versi PHP yang lebih rendah, tetapi 8.1 menghasilkan 未捕获的异常:'SerializedDomDocument' 的序列化不允许 每当尝试将此类对象传递给 serialize() fungsi. Berikut ialah contoh kod yang akan menghasilkan pengecualian sedemikian: https://3v4l.org/m8sgc.

Saya sedar tentang __serialize() / __unserialize() kaedah yang diperkenalkan dalam PHP 7.4, tetapi menggunakannya juga nampaknya tidak membantu. Coretan kod berikut menyebabkan pengecualian yang sama diperhatikan di sini: 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']);
    }
}

Saya sangat keliru tentang masalah ini dan sangat menghargai sebarang petua. Pada masa ini nampaknya satu-satunya cara ke hadapan ialah memperkenalkan penormal/denormalisasi eksplisit, yang akan menghasilkan perubahan ketara pada API pangkalan kod. Saya mahu mengelakkan situasi ini.

P粉891237912P粉891237912322 hari yang lalu559

membalas semua(1)saya akan balas

  • P粉041881924

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

    Pada 10 Ogos 2021, perubahan ini komited kepada versi 8.1 RC1:

    Tandai kelas DOM sebagai tidak boleh bersiri

    Jadi anda tidak boleh lagi menyusun kelas ini.

    balas
    0
  • Batalbalas