2014-01-16 11 views
2

У меня есть функция библиотеки PHP, ожидающая обратного вызова без аргументов. Я знаю, что могу передать метод объекта с array($this , 'my_function_name'), но как я могу дать параметры my_function_name? Я нашел решение, используя create_function, но из руководства PHP. Я вижу, что он имеет проблемы с безопасностью.передать обратный вызов С аргументами в PHP

+0

Оберните его другой функцией (предположительно анонимной) – zerkms

+0

@zerkms - в этом случае анонимная функция все равно получит аргумент из функции «вызова» библиотеки. Но я хочу дать ему свои собственные параметры. –

ответ

4
$that = $this; 

$wrapper = function() use($that) { 
    return $that->my_function_name('arg1', 'arg2'); 
}; 
+0

Это работает, но я думаю, что это требует php 5.3. Я делаю тему Wordpress, поэтому «использовать» она еще не готова для меня. –

+0

@Emanuel Mocean: тогда у вас нет другого хорошего выбора, кроме создания для этого реального метода. 'public function wrapper() ...' – zerkms

+0

В моем конкретном случае мне все еще нужно найти способ передать параметры в оболочку публичных функций, потому что единственный раз, когда я знаю, что я хочу предоставить в качестве параметра для обратного вызова, является то, когда Я передаю обратный вызов. Другими словами, мне нужна часть «use», чтобы сделать мои локальные переменные доступными в обратном вызове. –

0

Это будет зависеть от ваших функций библиотеки, инициирующих метод обратного вызова. Вы упомянули, что вы делаете тему Wordpress. Обычно WP использует метод call_user_func. В вашей библиотеке функции, использовать эту функцию, чтобы вызвать обратный вызов с аргументами, завернуть аргумент методов при вызове его:

Ответный Определение:

$callbackArg = "Got here"; 
defined_lib_func(array($this , 'my_function_name'), $callbackArg); 

Библиотека сценария:

function defined_lib_function($callback, $args) { 
    call_user_func($callback, $args); 
} 

для нескольких аргументы, просто передайте их как массив и определите метод обратного вызова, чтобы принять массив в качестве аргумента.

Смежные вопросы