下面的代码是否有意义?:
$t_server = isset( $_SERVER ) ? $_SERVER : $HTTP_SERVER_VARS;
据我了解,$HTTP_XXX_VARS
与 $_XXX
相同,只是 $HTTP_XXX_VARS
已弃用。因此,我不明白上面的代码。
在 $HTTP_XXX_VARS
未被弃用的旧系统中是否存在两个变量不同的情况?
最佳答案
$HTTP_SERVER_VARS
和 $_SERVER
是不同的变量(如果两者都已设置)。它们最初包含相同的值,但不同的是,脚本对其中一个所做的更改不会影响另一个。
superglobals
($_GET
、$_POST
、$_SERVER
等)在 PHP 4.1
中引入。长命名变量($HTTP_GET_VARS
、$HTTP_SERVER_VARS
等)在 PHP 4.1
中已弃用,并在 PHP 5.4中被删除
.
PHP 5.0
引入了配置设置 register_long_arrays
用于告诉 PHP
创建(或不创建)旧的长名称变量($HTTP_GET_VARS
和其他)。该设置在 PHP 5.3
上已弃用,并在 PHP 5.4
上完全删除(连同长名称数组)。
如您所见,在 PHP 4.0
和 PHP 5.4
之间,程序员可以使用这些变量的一个或两个版本。
行:
$t_server = isset( $_SERVER ) ? $_SERVER : $HTTP_SERVER_VARS;
利用新的超全局变量 $_SERVER
,如果可用(在 PHP >= 4.1
上),但它会退回到旧的 $HTTP_SERVER_VARS
如果它在旧的 PHP
上运行。它可能是几年前编写的,当时 PHP 4
仍在许多服务器上使用。
除了遇到PHP 4.0
这种不太可能发生的情况外,您可以安全地将上面的行更改为:
$t_server = $_SERVER;
或者到处使用 $_SERVER
而不是 $t_server
。
关于php - $HTTP_XXX_VARS 与 PHP 中的 $_XXX 不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29989005/