全局变量
现在,让我们来讨论一下函数内部所使用的变量以及它们与函数外部变量的关系。通常情况下,函数内部所使用的变量是“局部”变量(它意味着赋给该变量的值、以及对其所做的改变都单独地限于函数内部)。
考虑下面这个简单的例子:
<?php // define a variable in the main program $today = "Tuesday"; // define a function function getDay() { // define a variable inside the function $today = "Saturday"; // print the variable print "It is $today inside the function<br />"; } // call the function getDay(); // print the variable print "It is $today outside the function"; ?>
当你运行该脚本时,下面是你将会看到的结果:
It is Saturday inside the function
It is Tuesday outside the function
换言之,函数内部的变量和主程序中同名的变量是隔离的。因此函数内部的变量适于被称为“局部”变量,因为它们只存在于定义了它们的函数内部。
反过来也是真的,定义于函数内部的变量在外部不能被“看到”。为了详细说明,请看下面的例子和它的输出结果(或者没有输出):
<?php // define a function function getDay() { // define a variable inside the function $today = "Saturday"; } getDay(); print "Today is $today"; ?>
这里是程序的输出:
Today is
根据你在php.ini文件中设定的错误报告配置,你也许会看到下面的错误信息:
然而,我并没有说这种情况无法克服。为了让函数内部的变量从外部也可以访问(或者相反),你所需要做的是首先使用global关键字将它们声明为“全局性”的。Notice: Undefined variable: today in x1.php on line 10
下面是对早前的例子的改写,这次,将变量$today声明为全局性的:
<?php // define a variable in the main program $today = "Tuesday"; // define a function function getDay() { // make the variable global global $today; // define a variable inside the function $today = "Saturday"; // print the variable print "It is $today inside the function<br />"; } // print the variable print "It is $today before running the function<br />"; // call the function getDay(); // print the variable print "It is $today after running the function"; ?>
下面是其程序的输出:
It is Tuesday before running the function
It is Saturday inside the function
It is Saturday after running the function
所以,一旦变量被声明为全局性的,那么它在程序的全局范围内都是可访问的,而且它在函数的内部和外部均可以被操作。
PHP也提出了所谓的超全局变量(不管你是在函数内部还是外部,你都可以一直访问的变量)。你已经看到了一些这种特殊变量:$_SERVER、$_POST 和 $_GET变量都是超全局变量,这就是为什么你可以在函数内部访问像当前运行的脚本的名称或者表单值这样的信息。
超全局变量是个好东西,因为它们在你需要的任意时候都存在,而且你不需要跳出循环来使用存储在其中的数据。
It is Saturday inside the function