Каков синтаксис, чтобы заставить функцию 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);