起步 - 变量作用域

  • 作者:KK

  • 发表日期:2016.3.15


PHP的变量作用域控制比JS的严格一些

JS是外部的代码不能调用内部的变量,但内部可以调用外部的变量

但PHP是内部和外部都不能直接互相调用


这样的代码运行时会出错的

$a = 1;

function test(){
	echo $a; //这里调用了函数外面的a变量,在PHP里面是禁止这么做的,所以程序会运行出错,不会输出数字1
}

test();

全局变量和局部变量

当我们直接在脚本里写下一个变量时,这个变量就已经是全局变量,就像JS代码一样

但是当变量存在于一个函数体里面的时候,它就是局部变量

$a = '11'; //这个是全局变量

echo $a; //此时输出的是全局变量a
test();

function test(){
	$a = 22; //这个是局部变量,与全局变量是两个不同的,就算同名也不会互相冲突
	echo $a; //此时输出的是局部变量a
}

结果就是"1122"


global关键字引用全局变量

我上面说函数不能直接使用外部变量,但它可以通过一些手段来使用,使用global关键字就可以

$a = 11;
test();

function test(){
	global $a; //这是声明要引用外部的变量a
	echo $a;
}

这样就会输出"11"了,但现在的编程方法中基本很少用这种手段了,不提倡这种做法.函数里面要使用外面的值时,一般通过函数参数传递进去

注意global关键字是用于引用全局变量的,非全局变量是不能引用的,比如这样:

a();

function a(){
	$age = 18;
	b();
}

function b(){
	global $age;
	echo $age;
}

这个代码中如果b函数想用global关键字引用a函数里定义的$age变量的话会失败,因为a函数里的$age不是全局变量,而是一个局部变量,真要实现b函数使用$age的话,只能在a里面调用b时通过函数参数传递进去