这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 扣丁学堂带你了解并读懂PHP变量作用域

共1条 1/1 1 跳转至

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

助工
2020-09-21 16:37:56     打赏

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



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]