final pro Nette\Application\Presenter::__construct(…)
- Patrik Votoček
- Člen | 2221
Spousta lidí přepisuje konstruktor a pak se diví proč jim něco nefunguje… Jsem pro to udělat ho final. Startup stačí snad na všechny možné i nemožné případy…
- Honza Marek
- Člen | 1664
jansfabik napsal(a):
Nešlo by tam udělat podobnou kontrolu jako u startupu? Aby to z té vyhozené chyby snadno pochopil i začátečník. (Lepší nějaká hláška typu „použijte startup“ než Compile Error.)
Kdyby na každou obskurní chybu měl umět framework napsat kuchařku, tak by nedělal nic jiného.
- westrem
- Člen | 398
Divení je docela fajn stav ;-)
Ale iba niekedy a iba pre niekoho :P
Kdyby na každou obskurní chybu měl umět framework napsat kuchařku, tak by nedělal nic jiného.
Pravda, ale treba si uvedomit, ze v OOP je bezne nastavovat veci v konstruktore a zaciatocnik, co prilis neprecital o nette a o OOP vie len malo, no ma pocit, ze sa moze do toho s vervou pustit tak spravi presne to, ze zacne nastatovat veci v konstruktore. Preto si nemyslim, ze by bolo blbe prave v tomto pripade zavies podobnu kontrolu ako pri startup metode a preto jansfabik +1
Kdo přetěžuje konstruktor čehokoliv a nezavolá parent::__construct() je blázen
Alebo len nevie, ze to ma urobit, kazdy sme raz zacinali a nikto uceny z neba nespadol
Konstruktor jsem nikdy nepotřeboval.
To nic nemeni na tom, ze sa jedna o teba, a niekto mozno ma potrebu v nom nieco robit (ci uz odovodnenu ale nie)
udělat ho final
Bold statement. Chapem pohnutku, ale pride mi prilis radikalna, oseknut konstruktor niecomu tak zavaznemu ako je presenter. V nom predsa len bezi cela aplikacka a je nosnou castou jej live cycle.
Skor navrhujem aby o tom bola nasledne aj poriadna notice v dokumentacii, ze sa ma zneuzivat
startup
a nie konstruktor.
- Honza Marek
- Člen | 1664
westrem napsal(a):
udělat ho final
Bold statement. Chapem pohnutku, ale pride mi prilis radikalna, oseknut konstruktor niecomu tak zavaznemu ako je presenter. V nom predsa len bezi cela aplikacka a je nosnou castou jej live cycle.
Skor navrhujem aby o tom bola nasledne aj poriadna notice v dokumentacii, ze sa ma zneuzivat
startup
a nie konstruktor.
Nikdo tu nemluví o zrušení konstruktoru, ale o zajištění jeho nepřepsatelnosti. Což jde pomocí final poněkud přímočařeji než pomocí kontroly jako ve startupu.
- westrem
- Člen | 398
Honza Marek napsal
Asi budem chytat za slovicka (co robim nerad) ale pride mi, ze sme sa nepochopili.
- ak pouzijes
final
na konstruktor, automaticky ho odrezes pre potomkov, tzn nemozu mat vlastny - pomocou kontroly nikdy nezaistis neprepsatelnost a to nie je ani jej ucelom,
ucelom je upozornit na to, ze ak prepises mas volat
parent::
- paranoiq
- Člen | 392
pekelnik napsal(a):
Kdo přetěžuje konstruktor čehokoliv a nezavolá parent::__construct() je blázen…
souhlasím. ani s blbuvzdorností by se to nemělo přehánět. jsem proti tomu, aby mi někdo zakazoval používat vlastní konstruktor nebo kontrolovat zda jsem udělal co jsem udělat měl a plýtval tak zdroji
- Patrik Votoček
- Člen | 2221
westrem napsal(a):
- ak pouzijes
final
na konstruktor, automaticky ho odrezes pre potomkov, tzn nemozu mat vlastny
což je v zásadě v případě presenteru jedno protože startup ho zastoupí a ten je navíc blbuvzdorný. (proto jsem zvolil „finalizaci“)
- David Grudl
- Nette Core | 8227
Rozumím myšlence, ale jako jediné univerzální, krásné a funkční řešení vidím tohle: udělat nástroj, který projde zdrojáky a zkontroluje, jestli přepisované metody volají parent.