以下代码在安装PHP 5.3.6-13ubuntu3.2
时失败,这让我想知道为什么我无法在此方法中访问$ _SERVER Super Global。
<?php
header('Content-Type: text/plain');
$method = '_SERVER';
var_dump($$method); // Works fine
class i
{
public static function __callStatic($method, $args)
{
$method = '_SERVER';
var_dump($$method); // Notice: Undefined variable: _SERVER
}
}
i::method();
有人知道这里有什么问题吗?
答案 0 :(得分:8)
如手册中所示:
Note: Variable variables
Superglobals cannot be used as variable variables inside functions or class methods.
答案 1 :(得分:2)
[编辑 - 添加了可能的解决方法]
header('Content-Type: text/plain');
class i
{
public static function __callStatic( $method, $args)
{
switch( $method )
{
case 'GLOBALS':
$var =& $GLOBALS;
break;
case '_SERVER':
$var =& $_SERVER;
break;
case '_GET':
$var =& $_GET;
break;
// ...
default:
throw new Exception( 'Undefined variable.' );
}
var_dump( $var );
}
}
i::_SERVER();
i::_GET();
[原始答案] 这很奇怪。我同意它可能是一个PHP错误。但是,超全球确实有效,而不是变量变量。
<?php
header('Content-Type: text/plain');
$method = '_SERVER';
var_dump($$method); // Works fine
class i
{
public static function __callStatic( $method, $args)
{
var_dump( $_SERVER ); // works
var_dump( $$method ); // Notice: Undefined variable: _SERVER
}
}
i::_SERVER();