DOMDocument bersiri dalam PHP 8.1
P粉891237912
P粉891237912 2024-01-16 11:19:03
0
1
580

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粉891237912
P粉891237912

membalas semua(1)
P粉041881924

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan