php annotáció
Ti használtok annotációt php-ben?
Melyik engine-t ajánljátok? Nekem az jött le, hogy a doctrine common-ban lévő, ami jó, de kíváncsi vagyok, hátha van jobb is... Egyáltalán hogyan működnek ezek, futásidőben, vagy buildként?
A másik, hogy az annotációk kapcsán azt gondolom, hogy akkor jók, ha valami kimenne config fájlba, ami kihat a kód struktúrájára. Mondjuk ha a config fájlban egy osztály nevet, vagy egy metódus nevet adok meg, akkor szerencsésebb bizonyos esetekben, ha az a beállítás inkább az adott osztály vagy metódus mellett ott van annotációban. Jól gondolom?
■ Melyik engine-t ajánljátok? Nekem az jött le, hogy a doctrine common-ban lévő, ami jó, de kíváncsi vagyok, hátha van jobb is... Egyáltalán hogyan működnek ezek, futásidőben, vagy buildként?
A másik, hogy az annotációk kapcsán azt gondolom, hogy akkor jók, ha valami kimenne config fájlba, ami kihat a kód struktúrájára. Mondjuk ha a config fájlban egy osztály nevet, vagy egy metódus nevet adok meg, akkor szerencsésebb bizonyos esetekben, ha az a beállítás inkább az adott osztály vagy metódus mellett ott van annotációban. Jól gondolom?
Nem nagyon
A PHP maga annyit tud segíteni, hogy Reflection -el vissza tudja adni a docblock commenteket stringként amit utána lehet parsolni az adott eszköznek, de ez (reflection úgy általában) nem valami gyors, illetve eaccelerator pl hajlamos megölni ezt az információt (ha nem --with-eaccelerator-doc-comment-inclusion -el lett forgatva), igy futásidőben nem tünik okos dolognak erre támaszkodni.
Másik lehetőség az, hogy tokenizer -el tokenenkét vegignyálazva forrásfileokat T_DOC_COMMENT után kutatva szerzi meg ezeket az információkat az adott eszköz.
Én a következőkhöz találtam hasznosnak őket:
Személy szerint én idegenkednék attól, hogy olyan metadatát rakjak ezekbe a commentekbe amiket az éles rendszer futás közben használ fel. A config fileokkal könnyebbnek tünik kezelni az egyes környezeti külömbségeket, ha php forrásfileok akkor van rájuk azonnal syntax ellenőrzés amit a commentek nem tudnak. Számomra nem tünik valószínűbbnek az sem, hogy commentekben lévő elévült dolgokat hamarabb észreveszem mint config fileokban levőket (ez lehet másnál máshogy van), főleg ha ezek szükségesek a kód működéséhez akkor az ilyen regressziókat kis szerencsével megfogják a tesztek.
Ez a kommentezés szerintem is
Doctrine
Ahogy az előző hozzászóló is pedzegette, nem nagy dolog saját megoldást írni, de én a Doctrine megoldásást javaslom. Be tudod úgy állítni, hogy fejlesztői környezetben mindig újra beolvassa őket, productionben pedig cache is van. PHP-ba konvertál, dobsz rá egy APC-t, és a microtimeon kívül más nem mondja meg a különbséget.
Az hogy mikor használod csak rajtad múlik, de jól látod a problémát, a leírt helyzetben nem biztos hogy jó ötlet. Ha van egy adott osztályod, és mondjuk arra szeretnéd használni, hogy egy adott metódust megtalálj és meghívj, akkor jól jársz ezzel. Pl Lifecycle events az ORMben.
Ha viszont mondjuk egy olyat szeretnél csinálni vele, hogy megtalálj egy osztályt, akkor jobban jársz, ha configban tárolod el, ugyanis az annotation Reflectionből megy, és végig kell keresned az alkalmazásod osztályait, és beolvasni az annotációkat, így ez nem lesz gyors.
Ja, futásidőben nem jó ezzel