Разрешено ли официально использовать скобки для вызова ЛЮБОГО вызываемого типа в PHP?

Документация 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 был представлен.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]