Viditelnost metod presenterů
- uestla
- Backer | 799
Zdravím!
Vrtá mi hlavou, jak je to vlastně s viditelností jednotlivých metod presenterů. V různých kódech vídám totiž různé a nevím, která je „ta správná“.
U částí životního cyklu Presenteru jako startup()
nebo
shutdown()
vídám jak public
, tak
protected
. U metod renderAction()
zase jenom
public
. U továrniček zase protected
. U metod
navěšovaných pomocí callbacků např. na $onSubmit
formuláře
bývá public
.
Mohl by mi to prosím někdo osvětlit, kde se co a proč používá? Díky
- Ondřej Mirtes
- Člen | 1536
Signály, callbacky (to jsou de facto signály), action a render metody: public (může je volat kdokoli a v praxi to tak i je – do URL ti může návštěvník napsat cokoli a zavolá se daná metoda, pokud existuje).
Továrničky, startup, shutdown, beforeRender: protected (jsou to vnitřní záležitosti presenteru, může k nim jen on… a hodí se, aby k nim mohli i jeho předci).
- PetrP
- Člen | 587
Ondřej Mirtes napsal(a):
Signály, callbacky (to jsou de facto signály), action a render metody: public (může je volat kdokoli a v praxi to tak i je – do URL ti může návštěvník napsat cokoli a zavolá se daná metoda, pokud existuje).
Teď když jsou callbacky řešeny přes třídu Callback tak všechny musí být public.
Továrničky, startup, shutdown, beforeRender: protected (jsou to vnitřní záležitosti presenteru, může k nim jen on… a hodí se, aby k nim mohli i jeho předci).
Nejen že se to hodí ale minimálně protected být musí, protože k nim
musí jejich předci jako například Presenter::run()
;]
v6ak napsal(a):
Já public u callbacků považuju trošku za hack, protože jinak by to nefungovalo. (Ono to fungovat dost dobře ani nemůže, protože by php muselo vědět, kdo to pole vytvořil) V php 5.3 to lze řešit anonymní funkcí.
Dříve když se volali pomocí call_user_func a byli ve stejné třídě tak mohly být protected.
Editoval PetrP (17. 2. 2010 13:32)