理解PHP $GLOBALS变量

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了理解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&amp; 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

要查看所有超级全局,您必须单独使用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

脚本宝典总结

以上是脚本宝典为你收集整理的理解PHP $GLOBALS变量全部内容,希望文章能够帮你解决理解PHP $GLOBALS变量所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。