3.5 PHP变量
变量是指在程序执行过程中数值可以变化的量。变量通过一个名字(变量名)来标识。系统为程序中的每一个变量分配一个存储单元,变量名实质上就是计算机内存单元的命名。因此,借助变量名即可访问内存中的数据。
3.5.1 变量的赋值
和很多语言不同,在PHP中使用变量之前不需要声明变量(PHP 4之前需要声明变量),直接为变量赋值即可。PHP中的变量名称用“$”和标识符表示。标识符由字母、数字或下画线组成,并且不能以数字开头。另外,变量名是区分大小写的。
变量赋值是指给变量赋一个具体的数据值,字符串和数值类型的变量可以通过赋值运算符“=”来实现赋值,格式如下:
<?php $name = value; ?>
对变量赋值时,要遵循变量的命名规则。例如,下面的变量命名是合法的:
<?php $thisCup = "oink"; $_Class = "roof "; ?>
下面的变量命名则是非法的:
除了可对变量直接赋值,还可以采用变量间赋值和引用赋值的方式定义一个变量。在变量间进行赋值时,赋值后的两个变量使用各自的内存,互不干扰。引用赋值要使用“&”符号,是指用不同的名字访问同一个变量内容,改变其中一个变量的值时,另一个变量的值也会跟着发生变化。
【例3.11】变量间进行赋值。(实例位置:资源包\TM\sl\3\11)
结果为:
mingribook
【例3.12】变量$j是变量$i的引用,给变量$i赋值后,$j的值也会跟着发生变化。(实例位置:资源包\TM\sl\3\12)
结果为:
mrbccd mrbccd
注意
变量赋值和变量引用的区别:变量赋值是将原变量内容复制下来,开辟一个新的内存空间来保存;而变量引用则是给变量的内容再起一个名字,有点类似于笔名。
3.5.2 变量的作用域
变量必须在有效范围内使用,如果超出有效范围,则变量也就失去其意义了。变量的作用域如表3.9所示。
表3.9 变量的作用域
在函数内部定义的变量,其作用域为所在函数。如果在函数外赋值,则被认为是完全不同的另一个变量。在退出声明变量的函数时,该变量及相应的值会被清除。
【例3.13】比较在函数内赋值的变量(局部变量)和在函数外赋值的变量(全局变量)。(实例位置:资源包\TM\sl\3\13)
运行结果如图3.9所示。
静态变量在很多地方都能用到。例如,在博客中使用静态变量记录来访人数,在聊天室中使用静态变量记录用户的聊天内容等。
【例3.14】使用静态变量和普通变量同时输出一个数据,查看两者的功能有什么不同。(实例位置:资源包\TM\sl\3\14)
运行结果如图3.10所示。
图3.9 局部变量的使用
图3.10 比较静态变量和普通变量的区别
自定义函数zdy()输出的是1~10共10个数字,而zdy1()函数输出的是10个1。自定义函数zdy()含有静态变量,而函数zdy1()声明的是一个普通变量。初始化都为0,再分别使用for循环调用两个函数,结果是静态变量的函数zdy()在被调用后保留了$message中的值,而静态变量的初始化只是在第一次遇到时被执行,以后就不再对其进行初始化操作了,将会略过第3行代码不执行;而普通变量的函数zdy1()在被调用后,其变量$message失去了原来的值,重新被初始化为0。
全局变量虽然可以在PHP文件的任何地方访问,但是在用户自定义函数内部是不可用的。要想在用户自定义函数内部使用全局变量,要使用global关键字对其进行声明。
【例3.15】在自定义函数中输出局部变量和全局变量的值。(实例位置:资源包\TM\sl\3\15)
结果为:
郭靖 黄蓉
3.5.3 可变变量
可变变量是一种独特的变量,它允许动态改变某个变量的名称。其工作原理是该变量的名称由另外一个变量的值来确定,实现过程就是在变量的前面再多加一个符号“$”。
【例3.16】使用可变变量动态改变变量的名称。首先定义两个变量$a和$b,并且输出变量$a的值,然后使用可变变量来改变变量$a的名称,最后输出改变名称后的变量值。(实例位置:资源包\TM\sl\3\16)
结果为:
b 我喜欢PHP
3.5.4 PHP预定义变量
PHP提供了很多非常实用的预定义变量,通过这些预定义变量可以获取用户会话、用户及本地操作系统的环境等信息。常用的预定义变量如表3.10所示。
表3.10 常用的预定义变量