$form->onSuccess[] = $this->myFormSucceeded; vs $form->onSuccess[] = callback($this, ‚myFormSucceeded‘);
- chikeet
- Člen | 160
1)
$form->onSuccess[] = $this->myFormSucceeded;
2)
$form->onSuccess[] = callback($this, 'myFormSucceeded');
Jaký je v tom přesně rozdíl? Co je lepší používat a proč? Případně kdy je lepší použít první a kdy druhý způsob (a třetí a případně ještě další, které třeba přibudou :-))?
Editoval chikeet (5. 3. 2015 18:17)
- Jan Endel
- Člen | 1016
nejpoužívanější = nejnovější v tomto případě, tedy syntactic sugar:
$form->onSuccess[] = $this->myFormSucceeded;
resp. volil bych možná podle projektu, pokud na něm dělají staří nette harcovníci tak klidně první verze, i když je nejvíc „WTF“ pro nováčky.
Editoval Jan Endel (5. 3. 2015 18:56)
- pepakriz
- Člen | 246
Z mého pohledu je nejlepší:
$form->onSuccess[] = function (...) use (...) {
$this->myFormSucceeded(...);
};
- Protože tomu rozumí IDE
- IDE ti nehlásí unused methodu
- Neuděláš překlep v názvu metody, protože ti ji napoví autocomplete
- bude ti fungovat případný refaktoring
- nejedná se o nette magii
Editoval pepakriz (5. 3. 2015 19:25)
- chikeet
- Člen | 160
@pepakriz:
pepakriz napsal(a):
Z mého pohledu je nejlepší:
$form->onSuccess[] = function (...) use (...) { $this->myFormSucceeded(...); };
- Protože tomu rozumí IDE
- IDE ti nehlásí unused methodu
- Neuděláš překlep v názvu metody, protože ti ji napoví autocomplete
- bude ti fungovat případný refaktoring
- nejedná se o nette magii
Moje IDE rozumí i zápisu $this->myFormSucceeded a napovídá bez problémů (používám NetBeans 7.4 bez nějakého zvláštního nastavování v tomto směru.)
Na druhou stranu tvoje řešení umožňuje používat jako callback i jinou než public metodu, což se může taky hodit. Pokud teda správně chápu, že callbacky formulářů musí být public metody, protože se volají zvenku presenteru/komponenty.
Edit:
@pepakriz: s odstupem času (a po výměně neaktuálních NetBeans
za aktuální PhpStorm) používám výhradně tvoje řešení. Díky za
inspiraci :-)
Editoval chikeet (20. 4. 2015 20:10)
- chikeet
- Člen | 160
ic napsal(a):
chikeet napsal(a):
…
(používám NetBeans 7.4 bez nějakého zvláštního nastavování v tomto směru.)Je nějaký důvod používat starší 7.4 ?
Jen nedostatek času na upgrade (nebo špatná organizace, záleží na úhlu pohledu). Ale to už je myslím trochu OT.
Každopádně předpokládám, že když s napovídáním nemají problém NB 7.4, tak nebudou mít ani novější. Ale je možné, že předpokládám špatně, a každý taky zdaleka nepoužívá NB, že :-) Jen mě trochu překvapilo, že hned dva důvody, proč v tomto případě nepoužívat magické řešení, se týkaly napovídání IDE.
- kolsi
- Člen | 131
Ahoj, funguje v Nette 2.3 ještě metoda callback?
$form->onSuccess[] = callback($this, 'myFormSucceeded');
Mám to na více místech (= můžu opravit), ale používám i moduly, které to mají (např. Grido), ale v Nette 2.3 dostanu pouze hlášku: Call to undefined function callback(). V dokumentaci jsem však nenašel zmínku, že tahle metoda už nefunguje.
- David Matějka
- Moderator | 6445
Funkce callback se doporucuje nepouzivat jiz od verze 2.1 https://doc.nette.org/…tions/to-2-1, v 2.2 byla presunuta do balicku nette/deprecated
- kolsi
- Člen | 131
Pokud jde o tuto třídu, tak to na změnu namespace vypadá, ale jde přímo o metodu callback (která tuto třídu pak používá). V Nette 2.2 jsem našel soubor shortcuts.php, který obsahuje:
function callback($callback, $m = NULL)
{
return new Nette\Callback($callback, $m);
}
V Nette 2.3 toto není a tudíž ta metoda neexistuje.
- David Matějka
- Moderator | 6445
jelikoz composer v sandboxu neobsahuje ten balicek, jestli chces ty deprecated veci pouzivat, tak si nainstaluj nette/deprecated
- kolsi
- Člen | 131
David Matějka napsal(a):
Funkce callback se doporucuje nepouzivat jiz od verze 2.1 https://doc.nette.org/…tions/to-2-1, v 2.2 byla presunuta do balicku nette/deprecated
Díky za info. Tvůj post jsem přehlídnul. Já bych to ani nepoužíval, kdyby to nepoužívaly další doplňky (např. Grido).