理解PHP $GLOBALS变量

前端之家收集整理的这篇文章主要介绍了理解PHP $GLOBALS变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在从w3schools的 PHP教程学习 PHP.

在学习PHP时,我遇到了预定义全局变量的概念,即Superglobals.

为了更好地理解“Superglobals”,我编写了以下代码并在我的本地机器上的浏览器中执行它(ielocalhost):

<!DOCTYPE html>
<html>
  <body>

  <?PHP
    echo "<pre>";
    print_r($GLOBALS);
    echo "</pre>";
  ?>

  </body>
</html>

我在浏览器中得到以下输出

Array
(
    [_GET] => Array
        (
        )

    [_POST] => Array
        (
        )

    [_COOKIE] => Array
        (
            [toWorkNormally] => 1
        )

    [_FILES] => Array
        (
        )

    [GLOBALS] => Array
 *RECURSION*
)

以上输出在我的脑海中产生了许多疑点如下:

>根据我在PHP中的知识,有九种类型
superglobals(预定义的PHP全局变量)即. $GLOBALS,
$_SERVER,$_REQUEST,$_POST,$_GET,$_FILES,$_ ENV,$_COOKIE和
$_SESSION那么我怀疑的是预定义全局数组中的数组元素是什么
$GLOBALS即. [_GET],[_ POST],[_ COOKIE],[_ FINILES]意味着他们的意思
他们自己作为超级全球的独立存在?
> [toWorkNormally] =>是什么意思1从上面的数组输出
> RECURSION在元素[GLOBALS]中的含义是什么,以及如何打印
那些元素?
>因为$GLOBALS数组的目的是存储用户全局声明的变量,那么这个数组是如何预先填充其他一些值的,因为我没有在我的代码中声明任何全局变量

注意:我在我的机器上使用“Microsoft Windows 10 Home Single Language”操作系统.这是一个64位操作系统.我正在使用最新版本的XAMPP与PHP 7.0.13和HTTP Apache Web服务器v.2.4.23在本地运行程序.另请注意,我的代码中没有将任何其他变量定义为全局变量或本地变量.

根据我对PHP的了解并进行一些研究以及在各种版本的PHP上对多个操作系统进行测试,我发现了以下内容.

问题1& 3:

是的,关于9个超长球是正确的,但要记住的一个非常重要的事情是$GLOBALS – 引用全局范围内可用的所有变量.

一个有趣的旁注,请注意$GLOBALS是唯一不以下划线开头的超全球.

由于$GLOBALS包含对包括其自身在内的所有其他超全局的引用这一事实,当我们print_r($GLOBALS)时,它还将包括输出中的其他超全局.因为$GLOBALS也引用了自己,所以我们得到了你在第3点提出的回复.您可以将其视为包含$GLOBALS的无限维数组.与infinte循环几乎相同的想法.

[GLOBALS] => Array
    (
        [GLOBALS] => Array
            (
                [GLOBALS] => Array
                    (
                        ...
                    )
            )
    )

相反,脚本会看到这个并停止执行并只打印RECURSION.现在我已经在3种不同的环境中进行了测试,并且每次打开超大球的顺序都会发生变化,但是一旦达到$GLOBALS,它就会停止并打印RECURSION.

问题2:

我在$_COOKIE [toWorkNormally] =>上找不到任何信息我假设这是设置在其他地方.我在任何测试中都没有看到它.

问题4:

这既不正确也不正确. $GLOBALS的目的不是存储用户全局创建的所有变量.它仅引用全局范围内可用的所有变量,包括全局变量.这就是为什么你在输出中看到所有其他超全球的原因.但是很多开发人员都认为用户定义的全局变量存储在$GLOBALS中.

Description in the PHP.net manual

An associative array containing references to all variables which are
currently defined in the global scope of the script. The variable
names are the keys of the array.

要查看所有超级全局,您必须单独使用print_r()中的每一个.

要检查所有用户定义的全局变量,可以使用array_keys($GLOBALS),所有非超全局变量的项很可能是用户定义的全局变量.

编辑以回应用户评论

回应你的第一条评论,不,他们并没有什么不同.未打印的超级全局仍然是数组的一部分,但执行/输出停止,因为它到达$GLOBALS时会返回RECURSION. superglobals以随机顺序打印,并且在$GLOBALS不会被看到,因为它在$GLOBALS处检测到RECURSION并停止输出.

您可以使用print_r(array_keys($GLOBALS))检查所有超全局变量/全局变量; $_SESSION除外,因为会话尚未启动. print_r($_ SESSION)会给你一个未定义的变量$_SESSION Notice.当你输入session_start()时,你将能够看到$_SESSION;就在你打印之前.

Link to What References Are in PHP

References in PHP are a means to access the same variable content by different names.

Note that in PHP,variable name and variable content are different,so the same content can have different names

原文链接:https://www.f2er.com/php/137051.html

猜你在找的PHP相关文章