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