Php 5.5.3中不推荐的preg_替换

Php 5.5.3中不推荐的preg_替换,php,Php,我目前正在用php重新编程一个框架,并将我们的开发服务器升级到PHP5.5.3。当我启动webbrowser时,它返回以下错误: [19-Oct-2013 16:54:05 Europe/Amsterdam] PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /Applications/MAMP/htdocs/fw/lib/lang.php on

我目前正在用php重新编程一个框架,并将我们的开发服务器升级到PHP5.5.3。当我启动webbrowser时,它返回以下错误:

[19-Oct-2013 16:54:05 Europe/Amsterdam] PHP Deprecated:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /Applications/MAMP/htdocs/fw/lib/lang.php on line 57
第57行是

$response = preg_replace('/\{'.$find.'(:(.*))?\}/Ue', 'str_replace("{value}", "\\2", $replace)', $response);
我在阅读这些php文档时非常糟糕,我是一个初学者,仅仅通过
preg\u replace()
更改
preg\u replace\u callback()
就太好了。一位同事告诉我,它必须是美元价值[1]的东西,但这对她来说不起作用

有没有一个简单的解决方案,我忽略了什么吗?

这里是,让你更详细地了解为什么它被弃用,以及它的确切含义

基本上,原因是
/e
修饰符导致字符串作为PHP代码求值,就像调用了
eval
一样。相反,使用
preg\u replace\u callback
,它允许您传递一个实际的PHP函数,这确实是一个不错的选择

如果用匿名函数替换字符串代码(第二个参数),则代码应如下所示:

$response = preg_replace_callback(
    '/\{'.$find.'(:(.*))?\}/U', 
    function($m) use ($replace) {
      return str_replace($m, "\\2", $replace);
    } , 
    $response);

关键字
use
确保匿名函数可以使用应在调用范围中定义的
$replace
变量。请参阅。

注意,您也可以发送,如链接文章中所示。我从未听说过。每一天都是学习的一天!谢谢大家的反应。通过匿名函数更改字符串代码后,出现以下错误:
PHP可捕获致命错误:类闭包的对象无法转换为字符串
。我想我需要实现_回调函数。哦,我忘了提到这段代码在
foreach($find=>key$replace)
循环中了吗?也许这个错误与此有关?我不确定,我的错。我忘记实际使用
preg\u replace\u callback
。在我的回答中,我仍然调用了
preg\u replace
,导致PHP尝试将函数转换为字符串。我想你抄袭了这一点,也忽略了我的错误。我已经更新了代码示例。