【发布时间】:2015-06-18 20:02:57
【问题描述】:
我遇到过以下三行代码:
$_SERVER;
$_ENV;
$_REQUEST;
在我看来,这三行代码似乎什么也没做。它们不会导致任何错误。
我知道这三个全局变量是什么,只是不知道这三行代码在做什么。谁能赐教?
整个文件 - 如果它是相关的:
<?PHP
function register_global_array( $sg ) {
Static $superGlobals = array(
'e' => '_ENV' ,
'g' => '_GET' ,
'p' => '_POST' ,
'c' => '_COOKIE' ,
'r' => '_REQUEST' ,
's' => '_SERVER' ,
'f' => '_FILES'
);
Global ${$superGlobals[$sg]};
foreach( ${$superGlobals[$sg]} as $key => $val ) {
$GLOBALS[$key] = $val;
}
}
function register_globals( $order = 'gpc' ) {
$_SERVER; //See Note Below
$_ENV;
$_REQUEST;
$order = str_split( strtolower( $order ) );
array_map( 'register_global_array' , $order );
}
register_globals('GPCFRES');
?>
不,下面没有任何注释。
他们显然做了一些事情,因为如果我删除它们,那么 foreach 行就会出错。
【问题讨论】:
-
NOOP 这么简单
-
那么为什么三个不同的变量要做noop 3次呢?
-
除非使用这些变量,否则它们不会被注册。如果您在使用
$_SERVER之前尝试使用$_GLOBALS['_SERVER'],它将返回null。 -
@Graham:我认为他们初始化了变量。一些 php 引擎可能会等待将变量的创建推迟到需要它们的位置。但也许这种机制在使用
${$SuperGlobals...}时不起作用。 -
抱歉,确实是
$GLOBALS,而不是$_GLOBALS。我现在找不到它,但 php.net 上某处有一条评论解释说有时超全局变量无法通过$GLOBALS导出/调试/访问。现在找不到了。
标签: php global-variables noop