扣丁学堂带你了解并读懂PHP变量作用域

2018-01-15 13:28:05 749浏览

现如今,随着互联网科技飞速的发展和进步,目前在任何一种编程语言中,变量都有一定的生效范围,比如大部分的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。




扣丁学堂微信公众号



关注微信公众号获取更多学习资料



查看更多关于“php培训资讯的相关文章>>

标签: PHP培训 PHP视频教程 PHP从入门到精通 PHP学习路线图 PHP开发工程师

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号