$obj->onChange = … bez hranatých závorek
- David Grudl
- Nette Core | 8227
Protože na událost může reagovat více handlerů, přidávají se ve formě pole:
$obj->onChange[] = 'eventHandler';
I když budu chtít přidat jen jeden handler (a zároveň budu mít
jistotu, že skutečně bude přidán jen jeden handler, tj. k objektu nebude
mít nikdo jiný přístup), nelze hranaté závorky vynechat. Důvod je ten,
že PHP callback je klasické pole a nelze rozlišit, zda
array('foo', 'bar')
jsou dvě funkce foo() a bar()
nebo metoda foo::bar()
.
Nicméně při použití objektu Nette\Callback
a jeho továrničky funkce callback()
by to už šlo. Bylo by
technicky možné povolit zápis:
$obj->onChange = callback($this, 'eventHandler');
Otázkou je, zda to udělat. Jestli to nezpůsobí začínajícím programátorům víc komplikací než užitku?
- Honza Marek
- Člen | 1664
Co udělá?
$obj->onChange = callback($this, 'eventHandler');
$obj->onChange[] = "jinaFunkce";
Půjde stále použít nativní php callback nebo budu muset začít používat tyhle nette callbacky?
- Ondřej Mirtes
- Člen | 1536
A co zavést ještě syntaxi $this->callback('mojeMetoda');
? :)
Jinak to vypadá fajn, jen nevím, jak moc by to mátlo začátečníky. Ale když se to vysvětlí v dokumentaci, proč ne…
- David Grudl
- Nette Core | 8227
Honza Marek napsal(a):
Co udělá?
$obj->onChange = callback($this, 'eventHandler'); $obj->onChange[] = "jinaFunkce";
Tohle zcela jistě nepůjde, proto píšu o situacích, kdy prostě víš že existuje jeden callback.
- David Grudl
- Nette Core | 8227
Ondřej Mirtes napsal(a):
A co zavést ještě syntaxi
$this->callback('mojeMetoda');
? :)
Delší a nesrozumitelné.
- v6ak
- Člen | 206
Přijde mi to jako matoucí. Když můžu napsat $foo->onBar = callback(…), proč bych nemohl napsat také $foo->onBar = array(…), že? (Já vím proč, ale už vidím ty nováčky…)
Spíš bych udělal kontrolu správnosti callbacku při přiřazení, jak
jsem tu už dřív psal, aby k podobnému problému (vynechání
[]
) nedocházelo.
- Patrik Votoček
- Člen | 2221
David Grudl napsal(a):
Ondřej Mirtes napsal(a):
A co zavést ještě syntaxi
$this->callback('mojeMetoda');
? :)Delší a nesrozumitelné.
$this->onChange('mojeMetoda');
//resp.
$this->onChangeCallback('mojeMetoda');
jinak +1
- David Grudl
- Nette Core | 8227
Ok, ok, téma zavírám. Potřeboval jsem nasbírat materiál, až někdo přijde s otázkou, proč nefunguje onChange = … :-))