Funkcia spracovávajúca formulár – private či public?

ondrej1
Člen | 14
+
0
-

V Nette dokumentácii pri „Píšeme první aplikaci!“ je táto metóda private, v kapitole „Formuláře“, je ale public.

Ak použijem:
$form->onSuccess[] = [$this, 'commentFormSucceeded'];
nasledná funckia nemôže byť private.

Ale pri použití:
$form->onSuccess[] = $this->commentFormSucceeded(...);
následná funkcia funguje aj ako private.

jiri.pudil
Nette Blogger | 1034
+
+6
-

Ahoj,

první varianta vytváří callable, který se potom volá zvnějšku, proto musí být ta metoda veřejná.

Druhá varianta je moderní (PHP 8.1+) syntactic sugar pro Closure::fromCallable([$this, 'commentFormSucceeded']), což ten callable zabalí do closure a zachová v ní aktuální scope. V tomhle případě je to scope dané třídy, odkud jsou přístupné i její privátní metody.

Osobně nevidím důvod v moderní codebase nepoužívat druhou variantu.