preg_replace_callback的问题

tottyandbaty 2017-10-17 06:58:11
代码如下:



<?php
$_SERVER['TEST_KEY']=123123;
$rule='{$_SERVER.TEST_KEY}';

var_dump(preg_replace('/{\$(_\w+)\.(\w+)}/e',"\$\\1['\\2']",$rule)); //返回 123123
var_dump(preg_replace_callback('/{\$(_\w+)\.(\w+)}/',function($m){
return $$m[1][$m[2]];
},$rule)); //返回null


由于系统升级,/e参数不被支持,我用preg_replace_callback 改写,但是得不到结果,这里要怎么写法?
...全文
389 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2017-10-18
  • 打赏
  • 举报
回复
这样也可
var_dump(preg_replace_callback('/{\$(_\w+)\.(\w+)}/',function($m){ 
$t = "\${$m[1]}['$m[2]']";
return eval("return $t;");
  },$rule));  //返回 123123
xuzuning 2017-10-18
  • 打赏
  • 举报
回复
$_SERVER['TEST_KEY']=123123;
$rule='{$_SERVER.TEST_KEY}';
var_dump(preg_replace('/{\$(_\w+)\.(\w+)}/e',"\$\\1['\\2']",$rule)); //返回 123123
var_dump(preg_replace_callback('/{\$(_\w+)\.(\w+)}/',function($m){ 
      return $GLOBALS[$m[1]][$m[2]]; 
  },$rule)); //返回 123123
tottyandbaty 2017-10-18
  • 打赏
  • 举报
回复
引用 1 楼 hongmei85 的回复:
可变变量貌似不能用于Server

$_aaa['TEST_KEY']=123123;
$rule='{$_aaa.TEST_KEY}';

//var_dump(preg_replace('/{\$(_\w+)\.(\w+)}/e',"\$\\1['\\2']",$rule)); //返回 123123
var_dump(preg_replace_callback('/{\$(_\w+)\.(\w+)}/',function($m){ 
      global $_aaa;
			return ${$m[1]}[$m[2]]; 
  },$rule));
谢谢, 看了手册,手册上说:

#注意,在 PHP 的函数和类的方法中,超全局变量不能用作可变变量。$this 变量也是一个特殊变量,不能被动态引用。 
#不过很好奇,下面这行代码就可以
preg_replace('/{\$(_\w+)\.(\w+)}/e',"\$\\1['\\2']",$rule);
hongmei85 2017-10-18
  • 打赏
  • 举报
回复
可变变量貌似不能用于Server

$_aaa['TEST_KEY']=123123;
$rule='{$_aaa.TEST_KEY}';

//var_dump(preg_replace('/{\$(_\w+)\.(\w+)}/e',"\$\\1['\\2']",$rule)); //返回 123123
var_dump(preg_replace_callback('/{\$(_\w+)\.(\w+)}/',function($m){ 
      global $_aaa;
			return ${$m[1]}[$m[2]]; 
  },$rule));

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧