现如今,随着互联网科技飞速的发展和进步,目前在任何一种编程语言中,变量都有一定的生效范围,比如大部分的PHP变量只有一个单独的范围,最常见的是局部变量和全局变量,首先我先来介绍一下局部变量。
一般来说,局部变量都存在于一个具体的函数体内。在这个函数体内的变量,都可以在函数体内被使用,但是一旦到了函数外部,这个变量就不存在了。同理,在函数外的一个变量,在函数内也是无法使用的,请看这个例子:
$wow='hey!';//声明一个全局变量
functionsayHey()
{
echo$wow;
}
sayHey();//抛出Notice异常:未定义$wow变量
functionsayHello()
{
$hello='Hey!Nicetomeetyou!';
}
echo$hello;//同样报错:函数体内的变量不可以在外部访问PHP
在上面两个例子中,函数内无法引用函数外的局部变量,函数外也无法使用函数内声明的变量。所以,当你想使用函数内的一个变量的值时,就需要使用return将它返回出函数体外。同理,函数之所以有参数,就是因为不能调用外部的变量,所以需要通过传递参数来将一个值传递到函数体内。
使用include或require
在声明了变量之后,再引入文件,那么这个文件里的代码也可以使用这个变量。道理很简单,就像这样:
$wow='hey!';
include'wow.php';
//假设以下是wow.php中的代码
echo$wow;//正常输出heyPHP
$wow在整个作用域(也就是这个文件中)都会生效,所以他是一个全局变量。或者这么说,在函数体外声明的变量,自改变量声明开始,到程序文件末尾,都属于有效的生效范围。这种特性对引入的文件也是一样的。
GLOBAL
全局变量
必须掌握
在函数体外声明的变量其实就可以看做是全局变量,但是由于函数的特性,他会默认在函数体内优先声明新的变量。所以想要使用函数体外的变量,就必须使用global关键字。请看代码:
$wow='Hey!';
$hello='Welcometowowphp.com';
functionsayHello()
{
//声明这两个变量是引用全局变量
global$wow,$hello;
echo$wow.''.$hello;
}
sayHello();//输出Hey!Welcometowowphp.comPHP
注意到标注的第7行里的global关键字了吗,它就可以让函数在体内使用外部定义的全局变量。除此之外,PHP还提供了一个内置数组$GLOBALS,你也可以用这个数组来在函数体内调用外部变量:
$wow='Hey!';
$hello='Welcometowowphp.com';
functionsayHello()
{
echo$GLOBALS['wow'].''.$GLOBALS['hello'];
}
sayHello();//输出Hey!Welcometowowphp.comPHP
$GLOBALS是一个关联数组,这个概念会在以后数组的一章中讲到。在$GLOBALS中每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS之所以在全局范围内存在,是因为$GLOBALS是一个超全局变量。同样,有关超全局变量的介绍,也会在后面的章节中解释。
STATIC
静态变量
了解即可
在PHP中还有一种特性叫“静态变量”,它仅仅存在于函数体中。但是在整个函数执行完后,这个值并不会消失,会一直保持更改之后的值。直到这个程序被销毁。请看一个没有使用静态变量的示例:
functionechoStatic()
{
$a=0;
echo$a;
$a++;
}
echoStatic();//输出0
echoStatic();//输出0
echoStatic();//输出0PHP
你可以看到,我在函数体内让$a递增1,并多次调用这个函数。但是得到的结果全部都是0。因为每次调用时都会将$a的值设为0并输出0。将变量加一的$a++没有作用,因为一旦退出本函数则变量$a就不存在了。
那我就想让他调用一次就加一呢?很简单,将$a声明为静态变量即可:
functionechoStatic()
{
static$a=0;
echo$a;
$a++;
}
echoStatic();//输出0
echoStatic();//输出1
echoStatic();//输出2PHP
现在,变量$a仅在第一次调用echoStatic()函数时被初始化,之后每次调用echoStatic()函数都会输出$a的值并加一。
注意:
声明静态变量时,必须是一个确定的值。如果是表达式就会报错,因为静态声明是在PHP被编译时解析的。
最后想要学好PHP一定要选择专业靠谱的PHP培训机构,扣丁学堂PHP培训不仅有专业的老师和与时俱进的课程体系,还有大量的PHP视频教程供学员观看学习,想要学好PHP的小伙伴抓紧时间行动吧。扣丁学堂PHP技术交流群:374332265。