В JavaScript вы можете определять анонимные функции, которые выполняются немедленно:
(function () { /* do something */ })()
Можете ли вы сделать что-то подобное в PHP?
php
javascript
function
Эмануил Русев
источник
источник
call_user_func(function(){/* stuff */})
сделать?Ответы:
Для PHP7: см . Ответ Ясуо Огаки :
(function() {echo 'Hi';})();
Для предыдущих версий: единственный способ выполнить их немедленно, о чем я могу думать, - это
источник
call_user_func
В
PHP 7
это сделать то же самое в JavaScriptРезультат:
источник
Конечно, вы можете использовать
call_user_func
, но есть еще одна довольно простая альтернатива:источник
run
вашу функцию в какой-либо другой части кода, потому что не существует дескриптора вашей функции после строки, которая немедленно ее выполняет.run()
том, чтобы немедленно выполнить переданную ему безымянную функцию. То же, чтоcall_user_func()
, только параметры не передаются.$f();
и может быть быстрее, если используемый вами движок не оптимизируется для особого случая, когдаcall_user_func
имеет только один аргумент функции. Это потому, чтоcall_user_func
поддерживает передачу нескольких параметров, а его первый аргумент поддерживает либо строку в качестве аргумента, либо функцию. Тем не менее, еслиcall_user_func
он хорошо читается, я бы не стал его использовать,run
если код не находится где-то в нижней части пирамиды .run
иcall_user_func
.call_user_func
имеет присущий недостаток по сравнению сrun
потому чтоrun
делает только одно, тогда какcall_user_func
поддерживает дополнительные функции в дополнение к тому, чтоrun
делает. Вы можете попробовать быстрый цикл ( например ), чтобы увидеть, что быстрее на вашем движке.Это самый простой вариант для PHP 7.0 или новее.
Это означает создать замыкание, а затем вызвать его как функцию, указав "()". Работает так же, как JS, благодаря единому порядку оценки переменных.
https://3v4l.org/06EL3
источник
источник
Обратите внимание: принятый ответ - это нормально, но он занимает в 1,41 раза больше времени (на 41% медленнее), чем объявление функции и ее вызов в две строки.
[Я знаю, что это не совсем новый ответ, но я чувствовал, что было бы полезно добавить его где-нибудь для посетителей.]
Подробности:
Полученные результаты:
источник
Я попробовал это таким способом, но он более подробный, чем верхний ответ, с использованием любого оператора (или функции), который позволяет вам сначала определить функцию:
источник
$hack = function(){...}; $hack()
?Это не прямой ответ, а обходной путь. Использование PHP> = 7. Определение анонимного класса с именованным методом и создание класса и немедленный вызов метода.
источник
Выполняется не сразу, но близко к;)
источник