PHP use
операторы определяют псевдоним для остальной части файла, но они не влияют на строку, ссылающуюся на импортированную функцию или класс.
Когда вы говорите
use function Functional\pick;
это означает, что в этом файле вы можете вызвать функцию Functional\pick
, просто используя pick(...)
. Но если вы используете строку для ссылки на нее, тогда PHP не знает, как расширить псевдоним.
Самый быстрый способ решить эту проблему - просто использовать полное имя функции при вызове fromCallable
:
$pick1 = \Closure::fromCallable('Functional\pick');
echo get_class($pick1);
Закрытие
В качестве альтернативы, если вы действительно хотите использовать псевдоним, вы можете обернуть вызов на уровень глубже с помощью другой анонимной функции:
use function Functional\pick;
$pick1 = \Closure::fromCallable(function (...$args) { return pick(...$args); });
Но это, по-моему, намного сложнее, по крайней мере.
Редактировать: В этой недавней теме в php-externals
есть несколько приличных обсуждений