php后向引用怎么带入到函数参数
程序员文章站
2024-01-19 11:41:46
...
preg_replace('/{get_(\w+)}/',$arr[$1], $content);
$1为后向引用,我需要把匹配的 \w+ 作为参数,传入到自定义函数,或者作为数组的索引,该怎么实现呢
回复讨论(解决方案)
preg_replace_callback 可以回调函数,但是怎么把匹配到的,作为数组的索引,这个我找不到方法
preg_replace('/{get_(\w+)}/e','$arr["$1"]', $content);
$content = '{get_abc}';$arr['abc'] = 123;echo preg_replace('/{get_(\w+)}/e', '$arr["$1"]', $content);
扩展模式 e 表示 eval,表示将第二个参数当做 php 语句来执行
不过这种做法到了 php5.5 就废止了,因为动态解释 php 语句存在效率和安全的问题
合理的做法是使用 preg_replace_callback
下面开列 3 中写法
$content = '{get_abc}';$arr['abc'] = 123;echo preg_replace_callback('/{get_(\w+)}/', 'back', $content);function back($m) { global $arr; return $arr[$m[1]];}
$content = '{get_abc}';$arr['abc'] = 123;echo preg_replace_callback('/{get_(\w+)}/', create_function('$m', 'global $arr; return $arr["$m[1]"];'), $content);
$content = '{get_abc}';$arr['abc'] = 123;echo preg_replace_callback('/{get_(\w+)}/', function($m) use($arr) { return $arr["$m[1]"];}, $content);显然第 3 种写法最清晰,但只在 php5.3 才开始支持