php - oop

szasztok!

én eddig php4-ben programzgattam és nem volt szükségem az oop-ra.

php-ben hogyan működnek az ojjektumok? én C#-ban tanultam ojjektumorientáltan programozni és ott, ha pédányosítottam, akkor az a program vagy form bezárásáig éltek.
php meg ugye úgy működik, hogy kérésnél a webszerver meghívja a php értelmezőt, majd az a kódból generál egy html kódot és azt küldi le szerver a böngészőnek. amit a felhasználó lát maga előtt az már egy legenerált sima html oldal.

a kérdésem az, hogy ha a legenárálás után is hozzá szeretnénk férni az objektumokhoz, akkor azt megtehetjük? a html legenerálása után nem hallnak meg?

vagy hogyan működik ez?

php-oop-ban még csak egy "Hello World!"-ig jutottam.

Hozzászólások

A php értelmezés lefutása után (html kiküldése után) minden objektum elveszik.

php6-ban lesz goto :)

Aki feletted írt, annak:
Viccet félretéve, igenis rengetegszer jól jön az OOP. Sokszor ki lehet használni az öröklődést, az absztrakt osztályokat és az interfészeket. Többekközt arra jók, hogy elszeparálják a részeket egymástól: pl az adatbázisműveleteket a "business logic-től", és azt pedig a kinézettől (smarty pl). Nyílván szigorú elnevezési szabályokkal és globális változókkal ugyanezt meg lehet tenni, de sokkal egyszerűbb és átláthatóbb így. Ráadásul a php5 tud pár elég kellemes dolgot, ami más nyelvek esetén értelmetlen, php-ban viszont jól jön (__autoload fgv pl).
Érdemes elolvasgatni a manual php5-oop cikkjét.
Az objektumok perzisztens memóriában tárolása nem nagyon lehetséges, ez tényleg fájó pont. Van memcache, ami nem sokat ér, lehet trükközni sessionnal meg ügyes szerializációkkal. Én inkább úgy vagyok vele, hogy a PHP kérés volt, abban írom, az eszköz minden képességét igyekszem kihasználni annak érdekében, hogy minél hatékonyabb kódot írjak.

Andi, really. Take it from me. If I tell you something, I'm usually right.

Nézd meg a Zend Frameworkot mef a doksit... :)

-- "Bízzál Istenben és tartsd szárazon a puskaport!" - Cromwell --
-- Sayusi Ando - http://sayusi.hu --

Ha szeretnél egy objektumot az oldallekérés vége után a következő oldallekérésben is elérni, akkor igazából csak az a lehetőséged van, hogy fájlba szerializálod vagy sessionbe betárolod, hogy melyiket az mindegy, a lényeg hogy utána unserialize-el kibonthatod. Egy fontos dolog, hogy a Java egyes hasonló mechanizmusaival ellentétben itt a kódot nem tárolja le, tehát az unserialize pillanatában az objektum kódjának minimum autoload révén elérhetőnek kell lennie. Azt is figyelembe kell venni, hogy beépített PHP osztályokat így nem tudsz letárolni, mert azoknak nincs PHP kódja (resource típusok). Ja, és még egy: a serialize időbe kerül. Itt nem egy memory dumpról van szó, hanem az objektum adatainak stringgé alakításáról.

Ami nagyon király a PHP-OOP-ban: __autoload
Ami nagyon szar a PHP-OOP-ban: Ne akarj full OOP style rendszert írni benne, mert meggebedsz. KISS = Keep It Simple Stupid.

Az osztályokkal három dolgot lehet-érdemes csinálni:
- perzisztensé tenni, így adatbázisban tárolódik
- munkamenetben elmenteni
- (esetleg php daemon-t írni, de ezt csak igen ritka esetben lehet/érdemes)
Gyakorlatban komoly modell kialakítására php-ben nagyon ritkán van szükség.
A másik probléma, hogy az azonos felhasználó által futtatott php scriptek sokszor más-más gépen futkosnak, és csak a munkamenet-azonosító köti logikailag össze a kéréseket, a php pedig nincs felkészítve távoli objektumok használatára.

Tapasztalataim szerint érdemes objektumokat használni
- adatbázis burkolónak
- applikációs homlokzatnak (űrlapadatok olvasására, írására, ellenőrzésére)
- minden olyan esetben, ahol komolyabb egységbe zárható feladat van.

var_export -ot hasznalva kiirod egy fileba es mikor kell 1xeruen viszaa'llitod
http://www.php.net/manual/en/function.var-export.php

Ahoz, hogy visza tudd allitani az osztalyt keszits egy __set_state fuggvenyt, amely visszaa'llitsa a valtozokat:
http://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magi…
_______________________________________________________
UBUNTU 8.04 Rock's!
Type cat /vmlinuz > /dev/audio to hear the Voice of God.

Hihetetlen, hogy 2008-at írunk és még azon tanácskozunk, hogy az oop jobb-e, mint a strukturált programozás. . . nemá! :o)
Egyébként pedig minden shared memory stupekolás a php-ban. Tessék a session paramétereket adatbázisban tárolni, használni a smarty cache részeit és slussz.