1.4 变量作用域实践
我们知道,在PHP中定义一个变量后,在脚本任意位置都可以存取访问,这被称为“全局变量”,而定义在函数或类的方法中的变量只可以在函数内部访问,这叫作“局部变量”。
使用局部变量可以使源代码易于管理,试想如果所有的变量都是全局的,任何位置都可访问、修改它的内容,如果变量重名就可能发生“污染”。通过声明局部变量来限制一个变量的存取范围,可以让代码模块化,易调试,让应用运行更健壮。
下面我们就来看看如何使用全局变量和局部变量,如代码清单1-1所示:
代码清单1-1使用全局变量与局部变量
<? php $globalName = "老杜"; function getvar() { $localName = "Raymond"; echo"Hello, $localName! <br>"; } getvar(); echo "The value of \$globalName is: '$globalName'<br />"; echo "The value of \$localName is: '$localName'<br />"; ?>
该脚本运行后将显示如下内容:
Hello, 老杜! The value of $globalName is: 'Raymond' The value of $localName is: ''
在上面的代码中,我们一共创建了两个变量:其中$globalName是全局变量,它没有在任何函数体里;另一个是名为$localName的局部变量,是在sayHello()函数里内部定义的。
程序运行时先是调用sayHello()函数,显示的是“hello, Raymond! ”,接下来用echo显示两个变量,分别是$globalName和$localName。由于$globalName是定义在函数之外的全局变量,在脚本任何位置都可以访问,因此显示为“Raymond”。而$localName定义在sayHello()函数内部,只能在函数内访问。脚本中使用echo来访问这个局部变量,而PHP不允许外部访问此局部变量。因此运行时,PHP认为程序要创建一个新的全局变量$localName,并将默认值初始化为空,所以显示的时候是空白的。
PHP允许函数内部可访问外部全局变量,只需在函数中使用global关键字即可。我们来看代码清单1-2:
代码清单1-2使用全局变量与局部变量
<? php $globalName = "老杜"; function sayHello() { $localName = "Harry"; echo "Hello, $localName! <br />"; global $globalName; echo "Hello, $globalName! <br />"; } sayHello(); ?>
该段脚本会输出下面的内容:
Hello, Harry! Hello, 老杜!
由于在sayHello()函数里使用了global来声明$globalname为全局性质,因此它的内容被打印了出来。