0

我尝试了以下代码:

$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...

创建的函数和回调对我来说都是新的。这是由 nickb 在My question about preg_replace中给我的一些代码发展而来的,这些代码变成了preg_replace_callback.

我想要做的是将该答案中的代码包装到一个函数中,并且我在避免重新定义函数的范围内遇到错误。(升级到 PHP 5.3+ 对我来说是一个远程的可能性选项。)

我怎样才能让它工作?

4

1 回答 1

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);
于 2013-07-11T16:06:08.693 回答