Мне было интересно, можно ли передать функцию в качестве параметра в PHP; Мне нужно что-то вроде программирования на JS:
object.exampleMethod(function(){
// some stuff to execute
});
Я хочу выполнить эту функцию где-нибудь в exampleMethod. Возможно ли это в PHP?
Ответы:
Это возможно, если вы используете PHP 5.3.0 или выше.
См. В руководстве Анонимные функции .
В вашем случае вы бы определили
exampleMethod
это так:источник
create_function
create_function()
. Это не совсем то же самое, поскольку вам нужно передать свою функцию в виде строки кода, который затем остаетсяeval()
за кадром. Не идеально, но, возможно, вы сможете его использовать.exampleMethod(strpos);
Чтобы добавить к другим, вы можете передать имя функции:
Это будет работать в PHP4.
источник
Вы также можете использовать create_function, чтобы создать функцию как переменную и передать ее. Хотя мне больше нравится ощущение анонимности . Иди зомбатом.
источник
Просто закодируйте это так:
Было бы здорово, если бы вы могли изобрести что-то вроде этого (вдохновленное Laravel Illuminate):
источник
ВЕРСИЯ PHP> = 5.3.0
Пример 1: базовый
Пример 2: стандартный объект
Пример 3: вызов нестатического класса
Пример 4: вызов статического класса
источник
Согласно ответу @zombat, лучше сначала проверить анонимные функции:
Или проверьте тип аргумента, начиная с PHP 5.4.0:
источник
Протестировано на PHP 5.3
Как я вижу здесь, анонимная функция может вам помочь: http://php.net/manual/en/functions.anonymous.php
Что вам, вероятно, понадобится, и прежде не было сказано, как передать функцию, не заключая ее в функцию, создаваемую на лету . Как вы увидите позже, вам нужно передать имя функции, записанное в строке, в качестве параметра, проверить ее "возможность вызова" и затем вызвать ее.
Функция проверки:
Затем, чтобы вызвать его, используйте этот фрагмент кода (если вам также нужны параметры, поместите их в массив), см. По адресу: http://php.net/manual/en/function.call-user-func.php
следующим образом (аналогичным образом без параметров):
Вот класс, объясняющий, как сделать что-то подобное:
и пример использования
источник
Простой пример использования класса:
источник