Php 5.5.3中不推荐的preg_替换
我目前正在用php重新编程一个框架,并将我们的开发服务器升级到PHP5.5.3。当我启动webbrowser时,它返回以下错误: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
[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尝试将函数转换为字符串。我想你抄袭了这一点,也忽略了我的错误。我已经更新了代码示例。