魏长东

weichangdong

preg_replace_callback替换preg_replace高级用法

装了SAE的thinkPHP的框架,有个地方报错了。

preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead ..../ThinkPHP/Lib/Core/Dispatcher.class.php 第 125 行.

看了下125行的代码是这样的:

preg_replace('@(\w+)\/([^\/]+)@e', '$var[\'\\1\']=strip_tags(\'\\2\');', implode('/',$paths));

改成这样就好了。

preg_replace_callback('@(\w+)\/([^\/]+)@',function ($matches) use ($var){
                    return $var[$matches[1]] = $matches[2];
                 },implode('/',$paths));

主要是用preg_replace_callback替换了preg_replace,还有用了php的闭包函数。通过use可以使用外面的$var变量。但是我这么写也没有问题。

preg_replace_callback('@(\w+)\/([^\/]+)@',function ($matches){
                    return $var[$matches[1]] = $matches[2];
                 },implode('/',$paths));