PHP el yapımı serileştirme sorun

1 Cevap php

Benim görev (XML çıkış için) nesneler serileştirme tür yazmak çok güzel olurdu. Ben zaten yaptım, ama özyinelemeli bağlantıları önlemek için nasıl hiçbir fikrim yok ettik.

Sorun bazı nesneler ebeveynleri bağlantıları ile ortak (!) Özellikleri (gerçekten nessecary bulunuyor) sahip olmasıdır. Ve bazı çocukları Agrega bir üst nesnenin serialize çalıştığınızda - ebeveyne linkleri sonsuza özyineleme yok çocuklar.

Is there a solution to handle such recursions as print_r() does without hacks? I can't use somthing like "if ($prop === 'parent')", because sometimes there's more than 1 link to parents from different contexts.

1 Cevap

Kendi serileştirme fonksiyonu yazın ve her zaman o zaten işlenmiş öğelerin bir listesini iletirsiniz. PHP5 (Ben php5 kullanıyorsanız, varsayıyorum) bir nesneye her zaman kopyalar referanslar yana, aşağıdakileri yapabilirsiniz:

public function __sleep() {
    return $this->serialize();
}
protected function serialize($processed = array()) {
    if (($position = array_search($this, $processed, true)) !== false) {
        # This object has already been processed, you can use the
        # $position of this object in the $processed array to reference it.
        return;
    }
    $processed[] = $this;
    # do your actual serialization here
    # ...
}