繁体   English   中英

无法通过函数中的变量变量访问超级全局?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM