我目前正在重新编程php中的框架,我将开发服务器升级到php 5.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_replace()
更改preg_replace_callback()
就太好了。一位同事告诉我,它必须是有价值的东西[1],但那不起作用。
是否有一个简单的解决方案,我忽略了什么?
答案 0 :(得分:3)
以下是the page about modifiers,为您提供有关弃用原因的更多详细信息,以及具体含义。
基本上原因是/e
修饰符导致字符串被评估为PHP代码,就像调用了eval
一样。使用preg_replace_callback
代替,它允许您传递实际的 PHP函数确实是可行的方法。
如果用匿名函数替换字符串代码(第二个参数),那么你的代码应该是这样的:
$response = preg_replace_callback(
'/\{'.$find.'(:(.*))?\}/U',
function($m) use ($replace) {
return str_replace($m, "\\2", $replace);
} ,
$response);
关键字use
确保匿名函数可以使用应在调用范围中定义的$replace
变量。请参阅this discussion。