理解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中的知识,有九种类型 注意:我在我的机器上使用“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
要查看所有超级全局,您必须单独使用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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |