文章教程

2.7.5函数和变量作用域

9/17/2020 9:26:54 PM 人评论 次浏览

2.7.5 函数和变量作用域

变量的作用域就是变量的有效范围。对于大多数PHP变量,作用域只能有一个。但是,在用户自定义函数中,存在一个单独的局部函数范围。在一个函数内部定义的变量是局部变量,它只在本函数内有效,它的作用域就是当前的函数之内。也就是说,一个在函数外部定义的变量,不会在函数内部起作用;反之亦然。请看如下所示的代码2-37。

代码2-37 变量作用域演示程序(1)2-37.php


01 <?php

02 $var="some text";

03

04 function test()//定义函数test()

05 {

06 echo$var;

07 }

08

09 test();//调用函数test()

10 ?>


【代码解析】这段代码原意想通过调用函数test()来输出变量$var的值,但通过浏览器没有看到任何输出内容。这是因为,两个$var变量的作用域是不同的,第1个$var是一个全局变量,虽然它被赋值,但它的作用域,或者说它的有效范围并不在函数test()内,这一点和C、Java等语言完全不同,在C等语言中,全局变量在函数中自动生效,除非被局部变量覆盖。第2个$var是局部变量,echo语句引用的是第2个$var(其作用域是局部的),它没有被定义(或者说没有被赋值),因此该代码2-37不会在浏览器中显示出任何字符串内容。对上述代码稍作改动,读者可以更清楚地看到两个变量的有效范围。请看如下所示的代码2-38。

代码2-38 变量作用域演示程序(2)2-38.php


01 <?php

02 $var="some text";

03

04 function test()//定义函数test()

05 {

06 $var="some text in function";

07 echo'这是局部变量$var:'.$var;

08 }

09

10 echo'这是全局变量$var:'.$var;

11 echo'<br/>';

12 echo'<br/>';

13 test();//调用函数test()

14 ?>


这段代码的执行结果如图2-32所示。

图 2-32 变量的作用域

【代码解析】从这个执行结果可以看出,在函数test()外部定义的变量$var,不会在函数内部生效。在函数test()中输出的变量$var是在其内部定义的,而在函数test()外部定义的全局变量$var并不会在函数内部生效。

如果希望在函数内部引用全局变量,需要在函数内部使用global关键字。PHP中global关键字的作用是,在函数内部声明某个变量为全局变量,从而在函数内部使用该变量。代码2-39演示了global关键字的作用。

代码2-39 在函数内部使用global关键字2-39.php


01 <?php

02 $a=1997;

03 $b=1998;

04

05 function sum()//定义函数sum()

06 {

07 global$a,$b;

08 $b=$a+$b;

09 }

10

11 echo'$a='.$a;

12 echo'<br/>';

13 echo'$b='.$b;

14 echo'<br/>';

15 echo'<br/>';

16

17 sum();//调用函数sum()

18 echo'$a+$b='.$b;

19 ?>


【代码解析】这段代码第2、3行首先定义了两个全局变量$a和$b,然后第5~9行定义了求和函数sum(),在该函数内,使用global关键字引用全局变量求和,并将求和结果赋值给变量$b,如代码第7行和第8行所示。这段代码的执行结果如图2-33所示。如果将代码2-39中第7行注释掉,再次执行该程序,可以看到全局变量$a和$b没有在函数sum()内生效,其执行结果如图2-34所示。

图 2-33 在程序中使用global关键字
图 2-34 在程序中未使用global关键字

教程类别