Viditelnost metod presenterů

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

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

despiq
Člen | 320
+
0
-

Public: anyone either inside the class or outside can access them
Private: only the specified class can access them. Even subclasses will be denied access.
Protected: only the specified class and subclasses can access them

Ondřej Mirtes
Člen | 1536
+
0
-

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).

v6ak
Člen | 206
+
0
-

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í.

PetrP
Člen | 587
+
0
-

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)

v6ak
Člen | 206
+
0
-

Dobře, na stejné třídě třeba i protected. Ale formulářů se to týkat asi nebude, tam jde o jinou třídu.

Jinak řešení s callback je IMHO řešení podobné call_user_func.