PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行global $variable;就可以访问它们。
这些超全局变量是:
- $GLOBALS
- $_SERVER
- $_GET
- $_POST
- $_FILES
- $_COOKIE
- $_SESSION
- $_REQUEST
- $_ENV
1.先看一下$GLOBALS,它是包含了全部变量的全局组合数组,什么意思呢,看一个c语言程序
int main()
{
int a = 3;
void t()
{
printf("%d",a);
}
t();
return 0;
}
这个程序运行出来肯定是输出a,很容易理解的吗,在t()函数里将a变量输出 。但看一下php的一个程序:
<?php
$a = 3;
function t(){
echo $a;
}
t();
?>
这个会输出的是3吗?no,no,no那就太天真了,它是什么都输出不来的,why???很简单,因为$a不是全局变量,t()函数里面区不到它的值,哇~世界黑暗了,怎么办??别紧张啦,这个时候就需要我们的$GLOBALS出场了,刚才我说的它是包含了全部变量的全局组合数组可能大家没听懂,现在说就应该清楚多了,也就是说通过$GLOBALS就可以在t()函数里取到$a的值,方法$GLOBAL['$A'],试一下将t()函数内容改成function t(){
echo $GLOBALS['a'];
}运行一下,页面上就会清晰的显示出$a的值啦。再说一下$GLOBAL的范围,在你当前页面和当前页面require和include 进来的页面里的值它都可以取到。还算厉害吧。当然了,也不是万能的,再看一下这个
<?php
$a = 5;
function t(){
$b = 2;
}
function w()
{
echo $GLOBALS['b'];
echo $GLOBALS['a'];
}
t();
w();
?>
输出什么呢???答案是只有5,也就是说$GLOBALS是不能取到其它函数里面的值的。
再看第二个$_SERVER,$_SERVER是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。从$_SERVER里面可以提取很多有用的信息,比如$_SERVER['REMOTE_ADDR']可以得到当前用户的ip,下面我用foreach遍历整个$_SERVER数组,将其打印。代码如下:
<?php
foreach($_SERVER as $key => $value){
echo "<b>$key:</b> $value<br>\n";
}
想要看效果又不想或者现在不能写的可以看这个网址,这是sae服务器server的效果。http://5253.sinaapp.com/blog/server.php我将它上传到这里了。