cache, serializace / deserializace objektu
- wdolek
- Člen | 331
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
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
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.