全局变量的global的定义和使用
最初,我的需求是这样的:
<?php $name = "why"; function changeName(){ $name = "what"; } changeName(); echo "my name is " . $name . "<br/>"; ?>
执行代码的结果是:my name is why,而不是执行changeName()后显示what。分析原因,这是因为函数体changeName内$name变量被缺省设置为局部变量,$name的作用域就是在changeName内。于是,修改代码,添加全局变量如下:
<?php global $name; $name = "why"; function changeName(){ $name = "what"; } changeName(); echo "my name is " . $name . "<br/>"; ?>
注意:不能在用global声明变量的同时给变量赋值。像global $name = "why"的使用方式是错误的。
定义全局变量后执行的结果仍然为my name is why,这个结果让我吃惊。原来,global的正确用法是:"在一个函数中引入外部的一个变量,如果该变量没有通过参数传递进来,那么就通过global引入进来。" 也就是说,当一个函数引用一个外部变量时,可以在函数内通过global来声明该变量,这样该变量就可以在函数中使用了(相当于当作参数传递进来)。那么,再次修改代码:
<?php $name = "why"; function changeName(){ global $name; $name = "what"; } changeName(); echo "my name is " . $name . "<br/>"; ?>
这次的运行结果是:my name is what,说明global是起传递参数的作用,而并非使变量的作用域为全局。再看下面的例子:
<?php $name = "why"; function changeName(){ global $name; $name = "what"; } function changeName2(){ $name = "where"; } changeName(); changeName2(); echo "my name is " . $name . "<br/>"; ?>
执行结果为:my name is what,如果在changeName2()中添加global $name,运行结果则是:my name is where。
综上,global的作用就相当于传递参数,在函数外部声明的变量,如果在函数内想要使用,就用global来声明该变量,这样就相当于把该变量传递进来了,就可以引用该变量了。