Čím větší problém, tím větší kladivo!
Poslední dobou jsem se věnoval hlavně Javě, kdo ji zakusil už u ní obvykle zůstal. Proto když jsem před časem dělal web na objednávku v PHP přenesl jsem jsi pár „manýrů” k ulehčení práce z Javy do PHP.
Kdo alespoň o Javu někde zakopl, ví, že je to jazyk založený na OOP, kde každá třída dědí třídu Object, která má ve svém kódu uloženy základní metody (JavaDoc).
Když jsem programoval datové třídy pro přístup databázi. Byl jsem znechucen neustálým psaním, přístupu k proměnným stylem getProměnná(), setProměnná(value), který zbytečně zvětšoval objem kódu u jednoduchých tříd. Jako řešení s může nabídnout změnit přístup k proměnným na public a přistupovat k nim jednoduše $class->value. Toto řešení je ovšem z pohledu OOP trochu zvrácené, proto jsem naprogramoval následující rozhraní(interface), které poskytuje 2 metody pro manipulaci s proměnnýma třídy.
Dalším krokem bylo vytvoření třídy Object, která bude rozhraní implementovat a budou ji dědit všechny ostatní třídy. Na první pohled se zdá ObjectInterface jako zbytečné, stačilo by přece jen třída Object, ne? Samozřejmě, ale představte si situaci kdy potřebujete implementaci pozměnit, v potomku můžete sice překrýt metody, ale není to tak precizní a přehledné řešení jako implementace ObjectInterface. Druhým důvodem je třída, která už dědí z jiné a proto nemůže dědit z Object. (V PHP může každá třída dědit jen z 1 jiné třídy, ale implementovat libovolný počet rozhraní.)
Pozn. Třída ignoruje chyby (nedefinovaná proměnná), doporučuji však použít vyjímek k oznamování chyb.
Jak jsem psal výše, nápad jsem dostal při programování datových tříd databáze, proto uvedu příklad právě s ní. Vezměme tedy tabulku Osoba, která by mohla vypadat zhruba nápodobně:
Datová třída vypadá následovně:
Práce se třídou:
Ukázali jsme jsi jak jednoduše přistupovat k vnitřním proměnným třídy. Příště implementujeme Javovskou třídu Properties.
Zdravím všechny človíčky, které trochu baví informatika jako mně. Stránky jsou prozatím ve výstavbě, proto omluvte jejich práznost. Postupem času by se zde měli nacházem typy a triky v programovaní, Linuxu a mé osobní poznatky. Přeji příjemný pobyt!
quimi
Srpen 29th, 2008 at 16:34
Moc pěkný článek, akorát nevím jakou verzi PHP používáš, v PHP5 už můžeš použít metody _get a _set, které si můžeš definovat obdobně jako ty. Vyvolávají se pak automaticky, např. _set(„name“, „Otto von Bismarck“) se vyvolá příkazem $osoba->name = „Otto von Bismarck“, _get(„name“) zase příkazem echo $osoba->name.
admin
Srpen 30th, 2008 at 19:09
Používám sice PHP5, řešení __get a __set jsem zavrhl. Myslím si, že takové konstrukce do OOP nepatří. (Myslím tím $class->value = value). PHP se sice snaží podporovat OOP, ale nectí jeho základy, díky kterým může programátor pogramovací v jakémkoli jazyce podporující OOP může číst zdrojové kódy jiného jazyka bez nutnosti jej znát. Proto jsem zvolil vlastní řešení které má více výhod, které chci ukázat někdy příště.
pwnsuzmh
Únor 26th, 2010 at 16:03
cS0WWg ypodyvuaccgx, [url=http://lobwdiexmovr.com/]lobwdiexmovr[/url], [link=http://nwlcznkklwxa.com/]nwlcznkklwxa[/link], http://mncovmsmvfij.com/
kdztibnlv
Únor 26th, 2010 at 16:19
xUkMZX zfcvjbqdfrun, [url=http://kntuahmmrcbt.com/]kntuahmmrcbt[/url], [link=http://hwudgzliqzdd.com/]hwudgzliqzdd[/link], http://qnbnxdnqrfhl.com/
universal
Březen 4th, 2010 at 21:27
prednisone ndio xanax >:OO 350 carisoprodol domain mgmail333 qmsxb tramadol hcl 8(((
broedfremhaevet1
Březen 5th, 2010 at 0:38
cialis for sale >:-) retin a buy online us 408 buy ultram 5324 accutane 8((
focus1
Březen 6th, 2010 at 5:32
ultram tckgiw doxycycline
DD propecia 8)))
natalia
Březen 6th, 2010 at 9:10
acomplia prescription :OOO retin 793578 retin zoloft euqq accutane >:-]]]
tamara
Březen 8th, 2010 at 3:47
xanax uaetvb buy cheap acomplia online bydnsj tramadol hci 069000 retin ojw buy ultram 2809
appointment
Březen 8th, 2010 at 6:37
what is valium bay retin a 02527 buy xanax 4792 buy tramadol wholesale =]]]