Portál AbcLinuxu, 7. května 2025 22:02

Dotaz: PHP MVC - getter setter vs globalni promenne

1.3.2009 22:01 Dworkin
PHP MVC - getter setter vs globalni promenne
Přečteno: 1133×
Odpovědět | Admin

Dobry den,

jsem uplny novacek v navrhu aplikaci pomoci MVC vzoru a neumim si odpovedet na asi jednoduchou otazku. Na mnoha mistech se pise, ze se misto globalnich promenych (jak jsem byl doposud zvykly uzivat) je lepsi v tomto navrhu vyuzivat zapouzdreni method, ktere obsluhuji promene do __set a __get method.

Mohu se zeptat na Vas nazor zda je to dobry napad, a o nejake provnani metod getter, setter vs globalni promenne.

 

Dekuji za vas cas.

Dworkin

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

AraxoN avatar 2.3.2009 01:57 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: PHP MVC - getter setter vs globalni promenne
Odpovědět | | Sbalit | Link | Blokovat | Admin

Ehm, globálne premenné? Nemysleli ste náhodou členské premenné? Môj názor je taký, že getter a setter je možné do triedy doplniť, keď sa na to nájde dôvod. Toto doplnenie sa dá urobiť z väčšej časti transparentne, takže si myslím, že dávať ho automaticky všade je zbytočný overkill.

2.3.2009 10:04 klingac | skóre: 10 | Praha
Rozbalit Rozbalit vše Re: PHP MVC - getter setter vs globalni promenne

podla mna je praveze dobre pouzivat gettery a settery v hojnej miere - umoznuje to "schovat" implementaciu za metody. to prinasa obrovske vyhody ked sa aplikacia dalej preraba, meni. uz neraz sa mi to vyplatilo. napriklad sa jedneho dna rozhodnete ze z clenskej prmennej typu array spravite objekt typu XY (co sa stava pomerne casto pri rafactoringu). nasledne budete musiet prepisat vsetky casti kodu, ktore pristupuju priamo k clenskej premennej. ak bola od zaciatku tato premenna nejak schovana (private, protected) a na pristup k nej sa vyuzivali vyhradne getter a setter tak mate vyhrane lebo iba zmenite obsah tychto dvoch metod.

takze idealny sposob je podla mna mat vsetky clenske premenne neverejne (private, protected) a pristupovat k nim jedine cez metody. tento sposob sice natahuje cas pri vyvoji, ale oextremne usetri cas a namahu pri zmenach, opravach. samozrejme vsetko s rozumom, vyskytuju sa situacie ked to neni moc vhodne

2.3.2009 12:25 Dworkin
Rozbalit Rozbalit vše Re: PHP MVC - getter setter vs globalni promenne

Dekuji obema za kometare. Protoze jsem metody getter setter jeste nikdy nevyuzival, pusobi na me dosti tajemne, ale to asi jen pro to, ze jsou pro me nove. Mohu se jeste zeptat na lajckou otazku (mozna uplne mimo misu). Da se nejak vycist jake vsechny promene jsou vytvoreny?  Tedy jako kdyz vypisi print_r($_SESSION) tak vidim pohodlne jake promene mam aktualne nastaveny. Jde to nejak i touto metodou?

 

 

2.3.2009 15:02 klingac | skóre: 10 | Praha
Rozbalit Rozbalit vše Re: PHP MVC - getter setter vs globalni promenne

neviem ako sa daju zistit premenne v aktualnom kontexte (napr. vo funkci, metode), ale globalne premenne by mali byt (od PHP5) v poli $GLOBALS, takze na vypis by malo stacit print_r($GLOBALS).

inak podla toho co pises tusim ze asi by sa ti hodil nejaky debugger,ze? nastroj kde si pocas behu skriptu vypises co vsetko je v danom poli, objekte, premennej, ci je enjake premenna inicializovana v danom momente..

skus sa kuknut an xdebug  - spolu s nejakym klientom - napr. emacs, vim, eclipsePDT dosiahnes nielen toto ;o) ju a v pripade nejasnosti (instalacia atd) sa nevahaj spytat :)

AraxoN avatar 2.3.2009 15:17 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: PHP MVC - getter setter vs globalni promenne

gettery a settery nespochybňujem, ale v PHP sa to robí tak, že sa vytvorí metóda s názvom __get() kde ako parameter ide string s názvom premennej a metóda s názvom __set() kde ide názov premennej a hodnota. Tieto metódy sú takzvané "magic", takže sa automaticky použijú na prístup k členom s viditeľnosťou private. Používanie get a set je z toho pohľadu transparentné, a netreba si zvlášť vytvárať getter a setter pre každú premennú. Takže môžem mať členy public a keď zistím, že na niektorý z nich mi treba getter alebo setter, tak z nich spravím private a ošéfujem to v rámci __get() a __set(). Tí čo triedu používajú si žiaden rozdiel nevšimnú, a 3/4 triedy mi nezaberajú funkcie typu GetBlaa() { return $this->blaa; } a SetBlaa($blaa) { $this->blaa=$blaa; }

3.3.2009 19:54 Petr Holík
Rozbalit Rozbalit vše Re: PHP MVC - getter setter vs globalni promenne

Getry a setry jsou jenom prvni krok k programovani snadno upravitelnych modularnich aplikaci.  Samotne bez ostatnich prvku objektoveho navrhu nejsou k nicemu. Implementace MVC v PHP je dle meho nazoru trosku problematicka a mene zrejma nez napr v Jave - Nikoliv vsak nemozna.

Takze od pouzivani settru neodrazuji, ale snazte se pochopit proc se pouzivaji, a co prinasi, stejne tak s MVC. Obe technologie zeslozituji(nebo cini delsim) kod aplikace, ale nabizeji vetsi flexibilitu a znovupouzitelnost kodu.

8.3.2009 20:52 jos
Rozbalit Rozbalit vše Re: PHP MVC - getter setter vs globalni promenne
Odpovědět | | Sbalit | Link | Blokovat | Admin

mno lepší je mít kód bez obojího, když máš v nějaký třídě data, měl bys veškerou práci s nima mít právě v tý třídě. OOP bylo vymyšlený právě proto. doporučuju četbu Holub on patterns - stať nazvaná "why are getters and setters evil".

 

13.3.2009 10:32 moira | skóre: 30 | blog: nesmysly
Rozbalit Rozbalit vše Re: PHP MVC - getter setter vs globalni promenne
měl bys veškerou práci s nima mít právě v tý třídě

April je az za 3 tydny, ne?
Překladač ti nikdy neřekne: "budeme kamarádi"

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.