php学习笔记4--php中的变量作用域
变量作用域:可以简单地理解为变量的可见区域,变量能被访问的范围。
如同其他语言,php中也有全局作用域和局部作用域之分,但是不同的是:
php中的全局作用域指的是:只能在函数外部使用,而局部作用域指的是:
只能在函数内部使用。
php中的全局变量指的是:在函数外部定义,一般来说只能在函数外部被访问,
不能直接在函数内部可见的变量;
而局部变量指的是:在函数内部定义,只能在函数内部访问的变量。
$name = "csc";
function test(){
echo $name; //运行该脚本则会提示:Undefined variable: name未定义的变量name.
}
test();
由上可知,在函数内部不能直接访问函数外部定义的变量。当然也只是不能直接访问,肯定有间接访问的办法:
php提供了一个global关键字,在函数内部用global声明函数外部的全局变量之后,便可在函数内部访问全局变量了:
$name = "csc";
function test(){
global $name;//在函数中用global声明了全局变量$name之后,对该变量的所有引用都会指向其全局版本。
echo $name; //正常输出$name的值'csc'
}
test();
若是出现同名的全局变量与局部变量呢?
$name = "csc";
function test($name){
echo $name,'<br/>'; //当前只有局部变量$name可见,输出'dqr';
global $name; //声明现在开始$name是全局变量的$name,而非局部变量$name了
echo $name,'<br/>'; //当前$name指向的是全局版本的$name,输出'csc'
$name = 'dqrcsc'; //修改的是全局变量版本的$name
}
test('dqr');
echo $name; //在test()内部被修改,输出'dqrcsc'
php中实际上还存在另一种作用域:超全局作用域,只看名字就知道比全局作用域NB了。
超全局作用域:在函数内外都可见,一般用于php系统预定义的变量。如:$GLOBALS,$_GET,$_COOKIE等等都是所谓的
超全局变量。也称为自动化的全局变量。这就表示其在脚本的所有作用域中都是可用的。
不需要在函数或方法中用 global $variable; 来访问它。
这是就出现了另一种在函数内部访问全局变量的方法:
$name = "csc";
function test(){
echo $GLOBALS['name']; //正常输出$name的值'csc'
}
test();
当然,实质上访问的是超全局变量$GLOBALS,并不是直接访问全局变量$name。
此时,若是出现同名的全局变量与局部变量呢?
$name = "csc";
function test($name){
echo $name,'<br/>'; //当前只有局部变量$name可见,输出'dqr';
echo $GLOBALS['name']; //访问的是全局变量$name,而非局部变量,输出'csc'
}
test('dqr');