Kezdőoldal » Számítástechnika » Weblapkészítés » Milyen feladatoknál használnak...

Milyen feladatoknál használnak OO PHP-t? Tudnátok példákat mondani?

Figyelt kérdés

Én most még csak olyan szinten vagyok, hogy php-vel legenerálok html-t, használok egy-két saját függvényt, elvégzek kisebb feladatokat (pl bekért értkékekkel valamit kiszámolok) valamint adatbázisból kérek le dolgokat.

És úgy érzem ezzel elvagyok anélkül , hogy a php OO lehetőségeihez nyúlnék.

Hol elengedhetetlen vagy gyakori az objektumorientáltság használata php-n belül?



2013. ápr. 29. 00:14
1 2 3
 11/27 anonim ***** válasza:

A controller definiálja gyakorlatilag a működést. Mivel 3 részre van bontva minden, így ugye a megjelenítés és a model réteg között kell valami ami szabályozza, hogy melyik modeltől milyen adatok jelenjenek meg hol. A controller az ami tudja, hogy most éppen egy fórum aloldalt, egy hírt vagy éppen egy bemutatkozások oldalt nézel. Ez alapján kérdez a modelektől.

Ez azért jó mert ha megváltozik az adatbázis szerkezet akkor elég csak a modelekben módosítani a controlleren 1 sort se kell. Ha megváltozik a dizájn akkor csak a view-ben és a modell, controller megint nemváltozik semmit. A két szélső réteget viszont valamivel össze kell kötni hiszen ezek nem látnak rá egymásra. Erre való a controller.


A példát bár megoldhatod 4 függvénnyel, de egy bonyolultabb objektumot nem egyszerűen. Tehát ha tegyük fel ez a számológép objektum tartalmaz még 14 féle függvényt akkor később sokkal átláthatóbb és szebb kódod lesz ha $calculator->sum(24,13) -al hivatkozol mert tudod h melyik objektum függvényét hívtad mint ha calculator_sum() -al hivatkozol ami egyrészt ütközhet másrészt nehezebben olvasható.


Az újrafelhasználhatóság ott nem igaz, hogy ha ideadod nekem, hogy használjam a függvénykönyvtárad de a benne található 97 függvényből 34 neve ütközik olyan függvényekkel amiket én is használok akkor kénytelen vagyok átírni a kódot. Objektumok esetén ugye mivel az objektumon belül léteznek a függvények és változók így nincs ütközés.


Az objektumokat a legegyszerűbben úgy tudod elképzelni mint olyan függvénykönyvtárak amiknek saját változóik vannak. a $this azért kell mert egy objektumon belüli "globális" változóra vagy függvényre így hivatkozol. Ha azt mondod, hogy $this->alma akkor azt mondod h az aktuális objektum $alma nevű változója. Ha azt, hogy $this->sum() akkor az aktuális objektum sum függvényét hívod. Ez ugye azért fontos mert alma változó és sum függvény lehet az objektumon kívül is, de így behatárolhatod, hogy neked az ebben az objektumban létező kell.


MVC azért objektum alapú mert függvényekkel nem tudsz - vagy legalábbis csak nagyon kókány módon - megoldani olyan szintű szeparáltságor, hogy a különböző rétegek közül csak a megfelelőek tudjanak egymásra hatni. Például azzal, hogy a függvények között globális változókat használsz már károsítja ezt az elvet.



Amit rosszul értesz: Az OOP lényege nem az, hogy bizonyos dolgokat CSAK úgy lehet megoldani, hanem ez egy másik sokkal mondernebb programozási szemlélet. A PHP lehetőséget ad mind az oop mind a procedurális sőt akár a funkcionális programozásra is. Ezek közül jelenleg az OOP irányú az ami piacképes.

2013. máj. 4. 10:25
Hasznos számodra ez a válasz?
 12/27 A kérdező kommentje:

előző: köszi,értem a controller-t azt hiszem.


"Az újrafelhasználhatóság ott nem igaz, hogy ha ideadod nekem, hogy használjam a függvénykönyvtárad de a benne található 97 függvényből 34 neve ütközik olyan függvényekkel amiket én is használok akkor kénytelen vagyok átírni a kódot. Objektumok esetén ugye mivel az objektumon belül léteznek a függvények és változók így nincs ütközés. "


^^ ez igaz lehet OO-nál a class-okra is nem?

2013. máj. 4. 19:41
 13/27 A kérdező kommentje:

Azt ,hogy döntsem el, hogy mi legyen az objektum?

Van erre valami irány mutatás?

2013. máj. 4. 19:42
 14/27 anonim ***** válasza:
74%
nem :) mármint ha van egy ugyanolyan nevű classom akkor átnevezem azt amit tőled kaptam, a fájl legelején a "class izebigyo" -t átírom "class izebigyoKA" -ra vagy ilyesmi, de a benne található függvények már nem ütközhetnek sem a változók sem semmi, csak az objektum neve, mert az objektumokon belül egy elszeparált zárt világ létezik, saját névtérrel.
2013. máj. 4. 19:43
Hasznos számodra ez a válasz?
 15/27 anonim ***** válasza:
49%

nem, ezt a legnehezebb :(

Ha akár minimálisan is tudsz angolul akkor ajánlom ezt a videosorozatot:


http://www.youtube.com/watch?v=Aw28-krO7ZM


Itt a srác több részen belül egy komplett mvc alapú oldalt rak össze és nagyon sok dologra rávilágít, és borzasztóan szemléletes.

2013. máj. 4. 19:44
Hasznos számodra ez a válasz?
 16/27 A kérdező kommentje:

#14-es : de akkor a függvényeket is át lehetne nevezni és azok se ütköznének nem-OO esetén se


#15-ös: köszi

2013. máj. 4. 19:48
 17/27 anonim ***** válasza:

A függvényeket is át lehet nevezni de ha a függvényeid hivatkoznak más függvényeidre akkor azokban is át kell nevezni a hivatkozásokat, ha a függvény úgy van elnevezve akkor egyenként keresztcsere nélkül, ráadásul a névütközés csak futásidőben fog kijönni és nem is biztos, hogy kijön - teszemazt mert te ideadtál egy függvénykönyvtárat amit használok de olyan fv ütközik ami nekem egy require -olt fájlomban van.

A lényeg a lényeg, hogy class esetén CSAK a class nevének ütközése lehet gond ami gyorsan debugolható és javítható, míg ha van 97 függvény akkor azoknak a neveit egyenként kell nézni, hogy ütköznek-e, ha igen akkor mindet át kell nézni, hogy van-e bennük hivatkozás arra a függvényre és ott is át kell írni stb.


Az esetleges globális változókkal (fv-ek esetében is bár nem ajánlott meglepően sokan használnak globális változókat) megint probléma van, az méginkább debugolhatatlan, egyszer csak elkezdenek rossz értéket felvenni a változók a kódban arrébb. Az objektum viszont nem tudna kihatni külső változókra, és nem írhat felül magán kívül létező függvényeket.

2013. máj. 4. 19:58
Hasznos számodra ez a válasz?
 18/27 anonim ***** válasza:

Ne ajánljunk már JREAMdesign tutorialokat, annak a srácnak halvány lila fingja sincs, mit csinál.


A "mi legyen objektum" kérdésre a válasz szögegyszerű: MINDEN. Nem keverünk össze OO kódot procedurálissal. Ez alól maximum a pársoros bootsrap kód lehet kivétel.


Osztályokat nem nevezgetünk át, meg hasonlók, hanem az ütközések ellen kitalált namespace -eket használjuk (nagyon hasonlóan működik, mint Java alatt a package). Ilyenkor csak osztály- ÉS namespacenév együttes ütközése okozhat galibát, de ésszerűen megválasztott namespace -szel ez gyakorlatilag igencsak valószínűtlen. Ilyen namespace lehet pl egy "\com\facebook\chat" vagy bármi hasonló, "egyedi". Nem hinném, hogy ketten is lefejlesztik a "\hu\gyakorikerdesek\controller\UserSettingsController" osztályt.


Hogy "miért kötelező a $this"? Ez itt voltaképpen PHP sajátosság. Elég hülye dolog, mert semmi értelme nincs. Komolyabb nyelvekben a this referenciát csak ott kötelező használni, ahol az adattag neve amúgy ütközne egy lokális változó, vagy paraméter nevével, metódusok esetén pedig erre egyáltalán nincs szükség (a full OO nyelvek ilyenek szoktak lenni).


A PHP-val egy kicsit azért belenyúltál, mert vele kapcsolatban rendkívül nehéz jóminőségű oktatóanyagot feltúrni a neten. Kvázi magasról lesz**ják a kódminőséget. Aki pedig el tudná magyarázni, hogy is kéne ezt, az meg élesben, hivatásosként fejleszt, és nemigen ér rá oktatni, vagy tutorialokat írogatni.


Persze, ez nem azt jelenti, hogy esélytelen a dolog, csak azt, hogy nem lesz könnyű a dolgok helyes módját felderíteni.

2013. máj. 5. 08:12
Hasznos számodra ez a válasz?
 19/27 anonim ***** válasza:
Elég sok tárhelyszolgáltatónál nincs még 5.3-as php anélkül pedig nincs namespace.
2013. máj. 5. 10:11
Hasznos számodra ez a válasz?
 20/27 anonim ***** válasza:

Ez igaz, de egyrészt lehet keresni egy olyan szolgáltatót, ahol van (ingyenes szolgáltatókról beszélünk ugye), másrészt azért annyira nagyon nem gyakori az osztálynév-ütközés :)

No meg a kérdés is inkább a PHP OO használatára irányult, nem az ingyenwebek mai helyzetére. Ha meg az ember inkább nem fizetne azért, hogy "csak gyakorolgasson", akkor jobb opció egy webszervert feltelepíteni a saját masinára.

2013. máj. 5. 16:29
Hasznos számodra ez a válasz?
1 2 3

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!