#1 11. 3. 2010 17:00

wdolek
Nette guru
Místo: Praha
Registrovaný: 18. 10. 2008
Příspěvky: 210

cache, serializace / deserializace objektu

jde spise o obecny dotaz k PHP…

mam objekty Article a Author. v objektu Article mam promennou $author, ktera odkazuje na instanci Author. nic sloziteho… (pristup k autorovi pres clanek $article->getAuthor()->getName())

jak je to ale s cache a serializaci / deserializaci? kdyz se rozhodnu cachovat na jednom miste clanek (tedy vcetne intance tridy Author) a pro jistotu nekde zvlast i autora samotneho (protoze nejen clanky odkazuji na autory), dojde pak pri deserializaci k nejakemu uvedomenisi:

aha, tyhle serializovane instance jsou uplne to same, a proto jiz neni potreba z cache deserializovat autora, kdyz uz v pameti jednou je nalinkovanej u clanku (napriklad kdyz budu mit autora Pepu – deserializuju clanek, a pak treba druhy, jehoz autor je take pepa)

… a nebo proste v pameti pribude dalsi instance tridy Author? takze pri deserializaci 10ti clanku, jejichz autor je Pepa budu mit v pameti 10× instanci tridy Author pro autora Pepu?

predpokladam, ze se deserializace chova prave druhym zpusobem… jak by to slo poresit (pokud uz to PHP neresi nejakou magii samo)? ukladat si jen ID objektu, mit funkci getSomething() { return Something::find($this->somethingId); }?

a jeste me tak napadlo – pokud se rozhodnu ukladat si nekam ID, a pak pomoci nich ziskavat instance, jak reknu PHPcku, aby serializovalo objekt bez nekterych jeho vlastnosti (serializuj vse (id, text, time, …, authorId) krome $author (instance Author))

Editoval wdolek (11. 3. 2010 17:05)

Offline

 

#2 12. 3. 2010 11:53

vlki
Nette guru
Registrovaný: 30. 6. 2008
Příspěvky: 239

Re: cache, serializace / deserializace objektu

Nedokážu ti přesně říct, jak se ty instance budou vytvářet, ale kontrolovat to můžeš magickými metodami __sleep a __wakeup.

Offline

 

#3 12. 3. 2010 17:18

LM
Nette guru
Registrovaný: 11. 3. 2008
Příspěvky: 254

Re: cache, serializace / deserializace objektu

Pokud serializuješ pole objektů Article, a třeba všechny články budou odkazovat na totožnou instanci Author, tak po unserializaci bude tohle zachováno → bude jen jedna instance toho autora.

Pokud serializuješ každý článek zvlášť tak po unserializaci dostaneš vždy jinou instanci autora.

Offline

 

Zápatí