cache, serializace / deserializace objektu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
wdolek
Člen | 331
+
0
-

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)

vlki
Člen | 218
+
0
-

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

LM
Člen | 206
+
0
-

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.