Neden PHP yerleşik nesneleri seri hale getirmek mümkün değil mi?

2 Cevap php

Ben bir PHP nesne nesneleştirmek çalıştık.

Warning: unserialize() [function.unserialize]: Node no longer exists in /var/www/app.php on line 42

Ama why gerçekleşmesi oldu?

Ben SimpleXML nesneleri, neden php edemez unserialize nesneleri bilmek onun iyi nesneleştirmek bir çözüm buldu bile?

To serialize simplexml object i use this function

function serializeSimpleXML(SimpleXMLElement $xmlObj) 
{

        return serialize($xmlObj->asXML());

}

To unserialize an simplexml objetc i use this function

function unserializeSimpleXML($str) 
{

        return simplexml_load_string(unserialize($str));

}

2 Cevap

SimpleXMLElement bir libxml kaynak türü sarar. Kaynaklar getirilemez. Sonraki çağırma, libxml Düğüm nesneyi temsil kaynak yok, bu yüzden unserialization başarısız olur. Bu hiç bir SimpleXMLElement getirilmeye izin verilen bir hata olabilir.

Text / xml şey XML için doğru serileştirme biçimi beri çözüm, doğru bir tanesidir. Bu sadece bir dize olduğundan Ancak, gerçekten XML dizesini kendisi serialize için herhangi bir neden yoktur.

Bu "yerleşik" PHP sınıfları / nesneleri ile ilgisi doğal olarak yok, ama SimpleXML bir uygulama ayrıntı (ve PHP 5 DOM düşünüyorum) unutmayın.

Bir başka birinde sadece doğasında sınıfı (ana sınıfı xml iyi olurdu)

and use __sleep to store the data required to initialize simplexml(any object)

and __wake to reinitialize the object as required

Eğer (herhangi bir nesne) serialize bu şekilde

edit: remember this class needs to be accessible first, this can be done by loading(including) the class or an __autoload