Документация PHP гласит:
[…] если к имени переменной добавлены круглые скобки, PHP будет искать функцию с тем же именем, что и для переменной, и попытается ее выполнить.
Это про именованные функции. Скобки также работают с Closures, и это широко используется (обратная совместимость со старыми лямбда-функциями).
В настоящее время это тоже работает (с PHP 5.4):
$method = [$oObject, "methodName"];
$result = $method($param1, $param2);
Но это не задокументировано, и мои руки «покалывают», когда я пишу это.
Есть ли гарантия того, что это продолжит работать в будущем (не нужно использовать call_user_func () и т. Д.)?
Это безопасно:
public function apply(callable $any_callable_variant)
{
return $any_callable_variant($this);
}
Существуют прецеденты, после чего из PHP были удалены не документированные, но полезные функции.
Обновление: еще одна вещь
В некоторых комментариях (уже удаленных) упоминается callable
псевдотип.
Документация говорит о is_callable
:
Убедитесь, что содержимое переменной можно вызвать как функцию.
Это может проверить, что простая переменная содержит имя допустимого
функция, или что массив содержит правильно закодированный объект и
имя функции
Согласно этому, Closure
не вызывается (не верно, конечно). Сделайте тест:
var_dump(is_callable(function () { // prints: bool(true)
return false;
}, true, $callable_name));
var_dump($callable_name); // prints: string(17) "Closure::__invoke"
Кажется, никто даже не думал о документации, когда Closure
был представлен.
Задача ещё не решена.
Других решений пока нет …