Nette\Object – setters a getters

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
piler
Člen | 111
+
0
-

Pouzivam k jednemu projektu cele Nette a mam model Members. Je zdedeny z Nette\Object a ma protected/private atributy ako: $memberId, $username, $email…

pouzite:

<?php
$member = new Member;
$member->username = $username;
?>

Vyhodi vynimku, lebo nie je definovany ani getter a ani setter. Ked bude mat tento objekt napr. 25 atributov, tak budem musiet napisat 50 metod, v ktorych sa nic zvlastne nedeje.

Predtym som to automatizoval pomocou __set, &__get, ale kedze tieto metody su zadeklarovane v Nette\Objekt, tak ich prepisovat nechcem.

Ako to riesite vy, alebo ako sa jednoducho vyriesit, aby som nemusel pisat setters a getters, ktore vlastne nic poriadne nerobia?

Dik

Ondřej Brejla
Člen | 746
+
0
-

Přistupování k private a protected atributům z venku je chyba. To ti snad začne křičet i samotné php, ne jen Nette. Každopádně řešení je používat settery a gettery, protože to je good practise a mělo by to tak být. Skrývání implementace jako jeden ze základních stavebních kamenů OOP ;-) Navíc pokud si je definuješ, tak pak můžes k atributům přistupovat tak, jak popisuješ, protože se o zavolání getterů a setterů postará Nette.

Rozhodně doporučuji gettery a settery používat.

Patrik Votoček
Člen | 2221
+
0
-

mějme příklad:

class Foo extends Object
{
	public $foo1;
	private $foo2;
	protected $foo3;
}

pokud get a set metody pro foo2 a foo3 budou vypadat jenom takto (uvádím pouze foo2 protože pro foo3 by to bylo stejné):

class Foo extends Object
{
	...
	public function getFoo2()
	{
		return $this->foo2;
	}
	public function setFoo2($value)
	{
		$this->foo2 = $value;
	}
}

Tak asi moc nemá smysl mít ony proměnné jako private/protected a jednoduše z nich udělám public. (get a set metody musejí být public aby Nette\Object fungovalo tak jak má).
pokud by tam ale byla nějáká „složitější“ rutina ale i tak by byla u všech get a set metod stejná tak upravím __set($name, $value) a &__get($name) metody. Pokud je ale u všech metod jiná rutina tak se tomu že to budu muset napsat Xkrát nevyhnu… :-(

Edit: 2 Warden: on se ale ptá jestli je pro lepší napsat 25× stejný getter a setter nebo jestli upravit\doplnit __set a &__get metody Nette\Object.

Editoval vrtak-cz (16. 6. 2009 0:21)

piler
Člen | 111
+
0
-

Warden napsal(a):

Přistupování k private a protected atributům z venku je chyba. To ti snad začne křičet i samotné php, ne jen Nette. Každopádně řešení je používat settery a gettery, protože to je good practise a mělo by to tak být. Skrývání implementace jako jeden ze základních stavebních kamenů OOP ;-) Navíc pokud si je definuješ, tak pak můžes k atributům přistupovat tak, jak popisuješ, protože se o zavolání getterů a setterů postará Nette.

Rozhodně doporučuji gettery a settery používat.

Myslel som to tak, ze by som pristupoval k nim pomocou __set a __get a kebyze som potreboval specialnu set metodu, napr. setPassword(), kde by som pouzil napr. md5(), tak by sa zavolala tato metoda…ale ostatne by sa volali pomocou __set a __get…

Cize navrhujes/navrhujete, ze by som mal napisat 25 setters a 25 getters ak mam 25 atributov?

piler
Člen | 111
+
0
-

vrtak-cz napsal(a):

mějme příklad:

class Foo extends Object
{
	public $foo1;
	private $foo2;
	protected $foo3;
}

pokud get a set metody pro foo2 a foo3 budou vypadat jenom takto (uvádím pouze foo2 protože pro foo3 by to bylo stejné):

class Foo extends Object
{
	...
	public function getFoo2()
	{
		return $this->foo2;
	}
	public function setFoo2($value)
	{
		$this->foo2 = $value;
	}
}

Tak asi moc nemá smysl mít ony proměnné jako private/protected a jednoduše z nich udělám public. (get a set metody musejí být public aby Nette\Object fungovalo tak jak má).
pokud by tam ale byla nějáká „složitější“ rutina ale i tak by byla u všech get a set metod stejná tak upravím __set($name, $value) a &__get($name) metody. Pokud je ale u všech metod jiná rutina tak se tomu že to budu muset napsat Xkrát nevyhnu… :-(

Prave tie public sa mi pozdavaju, lebo ich nepotrebujem nijak osetrovat a opodobne…ale je to asi proti principom OOP…

jasir
Člen | 746
+
0
-

Prave tie public sa mi pozdavaju, lebo ich nepotrebujem nijak osetrovat a opodobne…ale je to asi proti principom OOP…

No a vždyť je používej. Gettery/Settery můžeš bezbolestně přidat později,
až zjistíš, že

  • a) potřebuješ read-only properties → změníš public na private a napíšeš getter
  • b) potřebuješ nějakou komplikovanější akci při přiřazení/čtení z property (například caching, inicializaci, kontrolu parametrů apod.) → změníš public na private a napíšeš getter a setter

Editoval jasir (16. 6. 2009 0:31)

Patrik Votoček
Člen | 2221
+
0
-

Jenom doplním že to co jsem psal platí pouze pokud nechceš read-only. Pokud chceš read-only tak se spoustě getterů nebo upravě &__get metody nevyhneš. Navíc pokud máš gettery a settery tak jak jsem napsal tak stejně „děláš“ z oněch protected/private metod public.

Ondřej Brejla
Člen | 746
+
0
-

piler napsal(a):

Myslel som to tak, ze by som pristupoval k nim pomocou __set a __get a kebyze som potreboval specialnu set metodu, napr. setPassword(), kde by som pouzil napr. md5(), tak by sa zavolala tato metoda…ale ostatne by sa volali pomocou __set a __get…

Cize navrhujes/navrhujete, ze by som mal napisat 25 setters a 25 getters ak mam 25 atributov?

Já public atributy nepoužívám ze zásady, protože mi to přijde prasárna a trošičku to smrdí. Já osobně bych těch 25 metod klidně napsal…ale jak říkám, já to tak dělám z přesvědčení a ze zvyku.

Už jen ten klid z toho, že mám atributy private a k nim settery…vím, že jinak než přes tu jednu metodu se tam ta data prostě nedostanou, takže vstupy si můžu ošetřit jak potřebuju. Ikdyž zrovna při první implemetaci vstupy neošetřuju, třeba za měsíc budu chtít a pak implementovat setter a dohledávat kde používám public atribut přímo? Ne děkuji :)

jasir
Člen | 746
+
0
-

Warden napsal(a):

Já public atributy nepoužívám ze zásady, protože mi to přijde prasárna a trošičku to smrdí. Já osobně bych těch 25 metod klidně napsal…ale jak říkám, já to tak dělám z přesvědčení a ze zvyku.

Už jen ten klid z toho, že mám atributy private a k nim settery…vím, že jinak než přes tu jednu metodu se tam ta data prostě nedostanou, takže vstupy si můžu ošetřit jak potřebuju. Ikdyž zrovna při první implemetaci vstupy neošetřuju, třeba za měsíc budu chtít a pak implementovat setter a dohledávat kde používám public atribut přímo? Ne děkuji :)

Když používáš Nette\Object a syntactic sugar $obj->publicAttribute, můžeš přeci změnit public → get/set bez jakéhokoliv dohledávání, ne?

Ondřej Brejla
Člen | 746
+
0
-

jasir napsal(a):

Když používáš Nette\Object a syntactic sugar $obj->publicAttribute, můžeš přeci změnit public → get/set bez jakéhokoliv dohledávání, ne?

Samo, to jistě můžeš. Já popisuju spíš obecný princip. Ne vždy a ne všude můžu mít k dispozici Nette\Object. Zvyknu si používat tento sugar, začnu psát aplikaci v něčem jiném a ono to tu najednou není. Já to třeba ani v Nette aplikacích nepoužívám, právě z tohoto důvodu. Ale je to zvyk.

piler
Člen | 111
+
0
-

Warden napsal(a):

jasir napsal(a):

Když používáš Nette\Object a syntactic sugar $obj->publicAttribute, můžeš přeci změnit public → get/set bez jakéhokoliv dohledávání, ne?

Samo, to jistě můžeš. Já popisuju spíš obecný princip. Ne vždy a ne všude můžu mít k dispozici Nette\Object. Zvyknu si používat tento sugar, začnu psát aplikaci v něčem jiném a ono to tu najednou není. Já to třeba ani v Nette aplikacích nepoužívám, právě z tohoto důvodu. Ale je to zvyk.

Takze to asi mozme uzavriet s tym, ze sa doporucuje pisat setters a getters pre kazdy attribut, ktory by som chcel menit „navonok“ triedy.

Hladal som ine riesenie, ako si usetrit cas pisanim. Este mi napadlo. Pouzivam Eclipse. Existuje nejaka extensions, ktora automaticky vygeneruje setters a getters na zaklade atributov?

Dik za rady.

Ondřej Brejla
Člen | 746
+
0
-

Eclipse neznám, ale v NetBeans to jde a v Aptana Studiu, mám dojem, taktéž…myslím, že v Eclipse by to taky mělo jít…to je docela základní funkčnost.

Editoval Warden (16. 6. 2009 13:01)

nAS
Člen | 277
+
0
-

piler napsal(a):

Prave tie public sa mi pozdavaju, lebo ich nepotrebujem nijak osetrovat a opodobne…ale je to asi proti principom OOP…

Já nechápu, proč by to mělo být proti principům OOP. Vždyť public proměnné jsou úplně normální mechanismus, který je určen k tomu aby se používal. Je nesmyslné psát prázdné gettery a settery, když tu proměnnou mohu definovat jako public.

Warden napsal(a):

Už jen ten klid z toho, že mám atributy private a k nim settery…vím, že jinak než přes tu jednu metodu se tam ta data prostě nedostanou, takže vstupy si můžu ošetřit jak potřebuju. Ikdyž zrovna při první implemetaci vstupy neošetřuju, třeba za měsíc budu chtít a pak implementovat setter a dohledávat kde používám public atribut přímo? Ne děkuji :)

Pokud to v té první implementaci přímo neošetříš, tak je to asi z důvodu, aby to bylo rychle a přehledně. Takže nevidím důvod proč nepoužít public. A až to budeš chtít lépe ošetřit, tak se ti určitě budou lépe hledat public proměnné, než procházet hromadu getterů a setterů a zjišťovat, který je dostatečně zabezpečený a který ne.

Já si myslím, že gettery a settery jsou velmi užitečná věc, sám je využívám velmi často, ale je nesmysl psát prázdné gettery a settery, když mohu proměnnou definovat jako public. Mě to připadá, jako kdyby si někdo zakázal používat v názvech proměnných půlku písmen – úplně zbytečné omezení, které ničemu nepomůže.

Edit: I v samotném Nette se používají public proměnné.

Editoval nAS (16. 6. 2009 15:24)

Ondřej Brejla
Člen | 746
+
0
-

nAS napsal(a):
Pokud to v té první implementaci přímo neošetříš, tak je to asi z důvodu, aby to bylo rychle a přehledně. Takže nevidím důvod proč nepoužít public.

To je trošku hloupost ne? Obcházet „řekněme správný (lepší slovo mě nenapadá, proto ty uvozovky)“ návrh pod záminkou „rychlosti a přehlednosti“? To mi řekni, co je na tom přehledné.

A až to budeš chtít lépe ošetřit, tak se ti určitě budou lépe hledat public proměnné, než procházet hromadu getterů a setterů a zjišťovat, který je dostatečně zabezpečený a který ne.

Taky zajímavá myšlenka…myslíš, že se ti bude lépe hledat použití X public atributů v X souborech a jejich přepisování na použití metod, než úprava jedné metody v jednom souboru?

Já si myslím, že gettery a settery jsou velmi užitečná věc, sám je využívám velmi často, ale je nesmysl psát prázdné gettery a settery, když mohu proměnnou definovat jako public. Mě to připadá, jako kdyby si někdo zakázal používat v názvech proměnných půlku písmen – úplně zbytečné omezení, které ničemu nepomůže.

Ne půlku písmen, ale třeba velké písmeno na začátku metody. Taky je to jen zvyk. Nikde není napsané, že to tak být nesmí a přesto to tak většina lidí nepoužívá a proč? Protože to má jakýsi smysl, stejně jako settery a getter a nepoužívání veřejných proměnných ;-)

Edit: I v samotném Nette se používají public proměnné.

Nikdo neříkal, že se v Nette nepoužívají :-) Nicméně to, že se nepoužívají v Nette přeci nic neznamená. To nemá nic společného s obecnými návyky.

Každopádně jsem jen poukazoval na své důvody a své zvyky. Každý má samozřejmě jiné. Nikomu je nenutím.

Ale přestaňme tu flamovat, to přeci není účel. Snad jsme pilerovi problematiku alespoň trochu osvětlili. Over.

Honza Marek
Člen | 1664
+
0
-

Warden napsal(a):
Taky zajímavá myšlenka…myslíš, že se ti bude lépe hledat použití X public atributů v X souborech a jejich přepisování na použití metod, než úprava jedné metody v jednom souboru?

Právě že když použiješ Nette\Object, tak to těch X souborů vůbec nepozná :-D

Honza Marek
Člen | 1664
+
0
-

piler: Nikdo ti nebrání přepsat si __get a __set, pokud to potřebuješ.

Já to dělám občas třeba takto:

public function &__get($name)
{
	if (array_key_exists($name, $this->data)) {
		return $this->data[$name];
	}

	return parent::__get($name);
}
Ondřej Brejla
Člen | 746
+
0
-

Honza M. napsal(a):
Právě že když použiješ Nette\Object, tak to těch X souborů vůbec nepozná :-D

viz. můj post výše :-) Diskuse se přesunula do jinčí roviny. Ale už to nerozvádějme, fakt to smrdí zbytečným flamem, dík ;-)

Honza Marek
Člen | 1664
+
0
-

Ale ten můj druhý příspěvek je podle mě zas vysoce hodnotný, tak mám na jeden šťourací nárok, ne? :-D

Ondřej Brejla
Člen | 746
+
0
-

Dobře tedy, beru tvůj popich za vykoupený hodnotnou reakcí :-D

Patrik Votoček
Člen | 2221
+
0
-

Warden napsal(a):

nAS napsal(a):
Pokud to v té první implementaci přímo neošetříš, tak je to asi z důvodu, aby to bylo rychle a přehledně. Takže nevidím důvod proč nepoužít public.

To je trošku hloupost ne? Obcházet „řekněme správný (lepší slovo mě nenapadá, proto ty uvozovky)“ návrh pod záminkou „rychlosti a přehlednosti“? To mi řekni, co je na tom přehledné.

A kde je řečeno že „správný“ návrh je nepoužívat OOP v PHP naplno? (nepoužívat public)

A až to budeš chtít lépe ošetřit, tak se ti určitě budou lépe hledat public proměnné, než procházet hromadu getterů a setterů a zjišťovat, který je dostatečně zabezpečený a který ne.

Taky zajímavá myšlenka…myslíš, že se ti bude lépe hledat použití X public atributů v X souborech a jejich přepisování na použití metod, než úprava jedné metody v jednom souboru?

Proto je tu &__get a __set aby jsi nemusel! (Nette\Object ti to jenom zjednodušší). Aneb chci přidat ošetření pro vlastnost. Najdu definování vlastnosti jako public přepíšu na protected/private dopíšu setter a getter. Nevím co je na tom měnění v X souborech?

Já si myslím, že gettery a settery jsou velmi užitečná věc, sám je využívám velmi často, ale je nesmysl psát prázdné gettery a settery, když mohu proměnnou definovat jako public. Mě to připadá, jako kdyby si někdo zakázal používat v názvech proměnných půlku písmen – úplně zbytečné omezení, které ničemu nepomůže.

Ne půlku písmen, ale třeba velké písmeno na začátku metody. Taky je to jen zvyk. Nikde není napsané, že to tak být nesmí a přesto to tak většina lidí nepoužívá a proč? Protože to má jakýsi smysl, stejně jako settery a getter a nepoužívání veřejných proměnných ;-)

To je to samé jako proč X% programátorů píše aplikace anglicky. A né česky s diakritikou v názvech proměnných. Právě ten smysl se snažím najít.

Edit: kdybych náhodou i přez to všechno co jsem tady psal chtěl někde použí všechny vlastnosti jako protected/private s „prázdnými“ gettery a settery (i když důvoud doopravdy nenalézám). Tak bych to řešil takto:

...
public function &__get($name)
{
	switch ($name)
	{
		case 'foo1':
		case 'foo2':
			return $this->$name;
			break;
		default:
			return parent::__get($name);
			break;
	}
}

public function __set($name, $value)
{
	switch ($name)
	{
		case 'foo1':
		case 'foo2':
			$this->$name = $value;
			break;
		default:
			return parent::__set($name, $value);
			break;
	}
}
...

Pro Nette\Object

Editoval vrtak-cz (16. 6. 2009 18:41)

Ondřej Brejla
Člen | 746
+
0
-

Opět jako u Honzy M…už se neřešilo pouze php a Nette\Object, není třeba opakovat co bylo řečeno :-) Doporučuji přečíst celý thread :-) Už tu flamovat nebudu, pokud si přejete něco mi sdělit, případně se hádat a pod, tak prosím na mail, jabber nebo icq, vše v profilu :-)

xificurk
Člen | 121
+
0
-

Warden:

Asi si stejně neodpustím poznámku – pokud použiješ „prázdné“ settery a gettery (o kterých prohlašuješ, že je to čistý návrh), tak máš naprosto shodné chování, jako kdybys použil public property (o které prohlašuješ, že je fuj fuj) – pravda, v případě getterů a setterů jsou tam navíc ty metody getXXX() a setXXX(), ale to už je v celku nepodstatný detail.

Rozdíl mezi public property a použitím prázdných getterů/setterů tedy rozhodně není v nějaké čistotě návrhu, ale pouze v počtu napsaných řádků kódu (a tím pádem i rychlosti provádění).

Ondřej Brejla
Člen | 746
+
0
-

xificurk napsal(a):

Napsal bych private msg, ale jaksi tu asi není, nebo ji nemůžu najít.

Pokud použiju prázdné settery a gettery, tak samozřejmě mám naprosto stejné chování, jako kdybych použil public property. Já to přeci nepopírám. Jen jsem poukazoval na to, že pokud se za nějaký čas rozhodnu, že by public být neměly, je jedno z jakého důvodu, tak pozdější refaktoring je zbytečně složitější. Proto je používám hned a mám pokoj. Toť asi vše.

Editoval Warden (17. 6. 2009 1:19)

Patrik Votoček
Člen | 2221
+
0
-

Předem se omlouvám za to že to tu už je trochu flame ale doopravdy mě to zajímá.

V čem je ten refaktoring složitější?

Aneb jak jsem psal zde:

vrtak-cz napsal(a):

A až to budeš chtít lépe ošetřit, tak se ti určitě budou lépe hledat public proměnné, než procházet hromadu getterů a setterů a zjišťovat, který je dostatečně zabezpečený a který ne.

Taky zajímavá myšlenka…myslíš, že se ti bude lépe hledat použití X public atributů v X souborech a jejich přepisování na použití metod, než úprava jedné metody v jednom souboru?

Proto je tu &__get a __set aby jsi nemusel! (Nette\Object ti to jenom zjednodušší). Aneb chci přidat ošetření pro vlastnost. Najdu definování vlastnosti jako public přepíšu na protected/private dopíšu setter a getter. Nevím co je na tom měnění v X souborech?

xificurk
Člen | 121
+
0
-

Warden napsal(a):

Napsal bych private msg, ale jaksi tu asi není, nebo ji nemůžu najít.

Myslím, že tahle problematika zajímá víc lidí ;-)

Pokud použiju prázdné settery a gettery, tak samozřejmě mám naprosto stejné chování, jako kdybych použil public property. Já to přeci nepopírám. Jen jsem poukazoval na to, že pokud se za nějaký čas rozhodnu, že by public být neměly, je jedno z jakého důvodu, tak pozdější refaktoring je zbytečně složitější. Proto je používám hned a mám pokoj. Toť asi vše.

Jenže já tu zbytečnou složitost nevidím… v zásadě mě napadají dva důvody refaktoringu:

  1. Zapomenuté ošetření vstupu/výstupu
  1. public property: musím nahradit public → private a napsat komplet getter/setter.
  2. prázdné g/s: můžu využít již napsané prázdné g/s (které ale v kódu do teď byly zbytečně) a prostě jen ošetřím vstupy/výstupy.

Shrnutí: Celkově (původní kódování+refaktoring) jsem v případě a) napsal asi o 4 písmenka kódu víc.

  1. Změna z veřejně přístupné vlastnosti na neveřejnou
  1. public property: musím nahradit public → private (nebo protected).
  2. prázdné g/s: mažu prázdné g/s.

Shrnutí: Celkově jsem v případě b) naprosto zbytečně psal prázdné g/s.

Přehlédl jsem něco? Ještě možná se podívat na to, když žádný refactoring není:

  1. původní kód

Oproti public property mám dvě „prázdné“ metody navíc.


Zpátky k jádru pudla, k otázce – jakou máš definici „správného“ návrhu?

To je trošku hloupost ne? Obcházet „řekněme správný (lepší slovo mě nenapadá, proto ty uvozovky)“ návrh pod záminkou „rychlosti a přehlednosti“? To mi řekni, co je na tom přehledné.

Zatím mi totiž přijde, že pro public property mluví rychlost a přehlednost kódu a pro prázdné g/s to, že je to tak „správně“ :-)

Honza Marek
Člen | 1664
+
0
-

Taky můžem ukončit tuhle debatu s tim, že jsme oproti Wardenovi ve značné přesile a to by mohlo jako argument stačit :-)

Patrik Votoček
Člen | 2221
+
0
-

To je právě to čeho nechci docílit… Rád bych věděl proč Warden obhajuje to co obhajuje.

Ondřej Brejla
Člen | 746
+
0
-

vrtak-cz napsal(a):

Už jednou jsem ti psal (a napíšu to znovu :-), že se nebavíme pouze o php, ale obecně (viz. ty posty výše)…
EDIT: to není na ten post přede mnou, ten byl jen rychlejší v odesílání :-)

xificurk napsal(a):

Myslím, že tahle problematika zajímá víc lidí ;-)

Tím jsem pouze chtěl zamezit flamování, pořeším to rád :-)

Jenže já tu zbytečnou složitost nevidím… v zásadě mě napadají dva důvody refaktoringu:

  1. Zapomenuté ošetření vstupu/výstupu
  1. public property: musím nahradit public → private a napsat komplet getter/setter.
  2. prázdné g/s: můžu využít již napsané prázdné g/s (které ale v kódu do teď byly zbytečně) a prostě jen ošetřím vstupy/výstupy.

Shrnutí: Celkově (původní kódování+refaktoring) jsem v případě a) napsal asi o 4 písmenka kódu víc.

Tady já vidím to zesložitění, v dohledávání použití public property v různých třídách. Imho je to napsání getterů a setterů (ikdyž prázdných), rychlejší.

  1. Změna z veřejně přístupné vlastnosti na neveřejnou
  1. public property: musím nahradit public → private (nebo protected).
  2. prázdné g/s: mažu prázdné g/s.

Shrnutí: Celkově jsem v případě b) naprosto zbytečně psal prázdné g/s.

Tady nic mazat nemusím. Pokud mám klasické private atributy, které používám interně v objektu, tak k těm žádné g/s nemám. G/s mám k „public“ atributům…k těm, ke kterým chci přistupovat z venčí.

Přehlédl jsem něco? Ještě možná se podívat na to, když žádný refactoring není:

  1. původní kód

Oproti public property mám dvě „prázdné“ metody navíc.

Ano, mám dvě metody navíc.


Zpátky k jádru pudla, k otázce – jakou máš definici „správného“ návrhu?

Zatím mi totiž přijde, že pro public property mluví rychlost a přehlednost kódu a pro prázdné g/s to, že je to tak „správně“ :-)

Pro prázdné g/s mluví moje spokojenost, že vím naprosto přesně odkud mi do objektu tečou data, mám jasný vstupní bod a to mě uspokojuje :-) Přehlednější mi prpperty právě moc nepřijdou. Ta větší rychlost tu bude, nicméně asi nebude tak závratna…přeci jen jsme v době 2, 4 a více jader s buh ví kolik paměti a já nevím s čím vším :-)

Snad ti to jako odpověď bude stačit :-)

Ono už ani není o čem se moc debatovat, já se furt snažím vysvětlovat svůj názor a když ho někomu vysvětlím, tak přijde někdo další a začne to samé od začátku :-D Snad už bylo vše řečeno :-)

Honza M. napsal(a):
Taky můžem ukončit tuhle debatu s tim, že jsme oproti Wardenovi ve značné přesile a to by mohlo jako argument stačit :-)

To je slovo :-D Ono to tu všechno pramení nejspíš z nějakého špatného prvnotního pochopení, kdy jsem popisoval opravdu svůj přístup k určitým věcem s určitými důvody a všichni se na mě sesypali, jak když kážu nějaká nesmyslná dogmata :-)

Fuj to jsou hrozné slohovky :-)

Editoval Warden (17. 6. 2009 10:36)

Patrik Votoček
Člen | 2221
+
0
-

Jo skoro všechno beru a chápu ale tohle prostě nechápu:

Warden napsal(a):

Tady já vidím to zesložitění, v dohledávání použití public property v různých třídách. Imho je to napsání getterů a setterů (ikdyž prázdných), rychlejší.

Můžeš uvést příklad? To je totiž to proč jsem napsal ty ostatní příspěvky.

Ondřej Brejla
Člen | 746
+
0
-

Pokud mám projekt o desítkách, stovkách tříd a tuto používám třeba ve třiceti a v těchto třiceti nastavuji public atribut této třídy, tak v okamžiku, kdy chci mít tento vstup kontrolovaný (tedy musím zajistit setter), tak musím procházet třídy a hledat, kde všude vlastně ten atribut nastavuju a přepsat to na použití setteru. A to proto, protože zrovna nepoužívám php a nemám k dispozici __set() (případně hotový Nette\Object). Nedej bože, když se aplikace vyvíjí distribuovaně a já nemám přístup ke všem zdrojovým kódům. Ostatní programátoři třeba jen využívají api mojí třídy.

Upřesnil jsem to trošku? Snad ano.

Editoval Warden (17. 6. 2009 13:26)

Honza Marek
Člen | 1664
+
0
-

Takže když máš Nette\Object, tak vyrábíš prázdné gettery a settery jen tak ze zvyku aniž bys k tomu měl důvod. Je to tak?

Ondřej Brejla
Člen | 746
+
0
-

Ze zvyku je vyrábím a ze zvyku je i explicitně používám. Stejně jako ze zvyku nepoužívám public property. Tzn nepoužívám $foo->bar = foobar; kde je private $bar; s Nette\Object sugar.

Patrik Votoček
Člen | 2221
+
0
-

super už konečně chápu tvou ideu… :-)