[英]Superglobals can't be accessed via variable variables in a function?
我无法通过函数内的变量变量访问超全局变量。 我是问题的根源还是PHP的微妙之处? 以及如何绕过它?
print_r(${'_GET'});
工作良好
$g_var = '_GET';
print_r(${$g_var});
给我一个通知:未定义的变量:_GET
PHP无法识别这是一个全局变量访问:
它将$_GET
和${'_GET'}
编译$_GET
相同的操作码序列,即global
FETCH_R
。 另一方面, ${$g_var}
将导致local
FETCH_R
。
这也在文档中提到:
Superglobals不能用作函数或类方法中的变量变量。
您可以使用$GLOBALS
超全局变量绕过它。 而不是写作
function & getSuperGlobal($name) {
return ${"_$name"};
}
你可以写
function & getSuperGlobal($name) {
return $GLOBALS["_$name"];
}
结果将是平等的。
似乎最后的PHP版本正好处理该问题。 下一代码适用于PHP 5.5.9。
<?php
function foo() {
print_r(${'_SERVER'});
}
foo();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.