在 PHP 中,全局变量和超全局变量都可以在函数和代码的任何地方访问。但是,它们之间有一些关键的区别。
全局变量是定义在函数外部的变量,可以在函数内部和外部进行访问和修改。但是,如果您在函数内部定义一个同名变量,则该函数内部的变量将优先于全局变量。
超全局变量是一组预定义的全局变量,它们在任何范围内都可用,包括函数内部和外部。这些变量以一个下划线开头,并以全大写字母命名。例如,$_POST,$_GET,$_SESSION 等。
底层原理是,PHP 在运行时会创建一个全局数组 $_GLOBALS,用于存储全局变量和超全局变量。当您定义一个全局变量时,实际上是将变量的值添加到 $_GLOBALS 数组中的一个键名为变量名的元素中。当您访问一个全局变量时,PHP 实际上是在 $_GLOBALS 数组中查找该变量名的元素。
超全局变量是在脚本启动时自动创建的,无需使用 global 关键字声明。它们在 $_GLOBALS 数组中以一个下划线开头,并以全大写字母命名,以避免与用户定义的变量冲突。由于超全局变量是在脚本启动时创建的,因此它们始终在脚本的任何位置都是可用的。