21,887
社区成员
发帖
与我相关
我的任务
分享
<?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
var_dump(preg_replace_callback('/{\$(_\w+)\.(\w+)}/',function($m){
$t = "\${$m[1]}['$m[2]']";
return eval("return $t;");
},$rule)); //返回 123123
$_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
#注意,在 PHP 的函数和类的方法中,超全局变量不能用作可变变量。$this 变量也是一个特殊变量,不能被动态引用。
#不过很好奇,下面这行代码就可以
preg_replace('/{\$(_\w+)\.(\w+)}/e',"\$\\1['\\2']",$rule);
$_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));