1

我目前正在用 php 重新编写一个框架,并将我们的开发服务器升级到 php 5.5.3。当我启动网络浏览器时,它返回以下错误:

[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()太好了,难以置信。一位同事告诉我,它必须是 $value[1] 之类的东西,但这不起作用。

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

4

1 回答 1

3

这是有关修饰符的页面,为您提供了有关不推荐使用它的原因以及确切含义的更多详细信息。

基本上原因是/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应该在调用范围内定义的变量。请参阅此讨论

于 2013-10-19T15:07:03.743 回答