欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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 才开始支持