Каков синтаксис, чтобы заставить функцию create_function работать в качестве обратного вызова:

Я попытался следующий код:

$for_callback=create_function('$match','return $GLOBALS[\'replacements\'][$match[1]];');
$result = preg_replace_callback( $regex, '$for_callback', $string);

Переменная $GLOBALS['replacements'] генерируется динамически до вызова этой функции.

Я получаю сообщение об ошибке вроде

Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, '$for_callback', to be a valid callback in...

созданные функции и обратные вызовы являются новыми для меня. Это происходит из некоторого кода, данного мне ником на мой вопрос о preg_replace, который превратился в preg_replace_callback,

То, что я пытаюсь сделать, это обернуть код в этом ответе в функцию, и я сталкиваюсь с ошибками с областью действия, избегая переопределения функции. (Обновление до PHP 5.3+ на данный момент является для меня возможностью удаленного доступа.)

Как мне заставить это работать?

1 ответ

Решение

Во-первых, переменные не должны быть заключены в одинарные кавычки, так как они не будут заменены реальным значением.

И, во-вторых, вы должны использовать анонимные функции (т.е. замыкания), поскольку они намного проще. Используйте их как в этом примере:

$for_callback = function($match) {
    return $GLOBALS['replacements'][$match[1]];
};
$result = preg_replace_callback( $regex, $for_callback, $string);

редактирование: замыкания стали доступны в PHP 5.3. Так что, если вы все еще используете PHP < 5.3, вы должны (действительно обновить или) использовать следующее:

$for_callback=create_function('$match','return $GLOBALS[\'replacements\'][$match[1]];');
$result = preg_replace_callback( $regex, $for_callback, $string);
Другие вопросы по тегам