2.4 PHP变量
PHP中变量是指在执行程序时可以变化的量,它通过一个名字(变量名)表示。
2.4.1 定义和使用变量
PHP中的变量,用一个美元符号$和变量名(变量标识符)来表示。
注意:变量名是区分大小写的。
对于变量的命名,遵循一定的规则:由字母、数字和下画线组成,且必须以字母或下画线开头,例如下面的代码:
变量赋值,是指给变量一个具体的数据值,对于数字和字符串的变量,可以通过“=”实现赋值。例如,上面代码中的变量$name和$_name,分别给他们赋值为123和abc。
除了直接给变量赋值以外,还有两种方式可为变量赋值,一种是变量间的赋值,即赋值后两个变量使用各自的内存,互不干扰;另一种是引用赋值,即用不同的名字访问同一变量内容,当改变其中一个变量的值时,另一个变量也跟着发生改变,引用赋值使用“&”符号表示引用。
【例2-17】(实例文件:ch02\Chap2.17.php)定义和使用变量。
在IE浏览器中运行结果如图2-25所示。
提示:赋值和引用的区别在于,赋值是将原来变量的值复制了一份,然后把复制的内容保存给了一个新变量,而引用则是相当于给变量重新起了一个名字,类似人的名字,有大名和小名,但都是指同一个人。
图2-25 定义和使用变量
2.4.2 预定义变量
PHP中还提供了大量的预定义变量。在PHP编程中,经常会遇到需要使用地址栏的信息,如域名、访问的URL、URL带的参数等这些情况,这时就可以使用PHP提供的预定义变量,通过这些预定义变量便可以获取用户的会话、用户的操作系统环境和本地的操作系统环境等信息。常用的预定义变量如表2-5所示。
表2-5 常用的预定义变量
【例2-18】(实例文件:ch02\Chap2.18.php)预定义变量的基本运用。
在IE浏览器中运行结果如图2-26所示。
提示:在PHP中,自定义函数外部的变量是无法直接在该函数中使用的,这里使用了预定义变量$GLOBALS引用外部的变量$name。
注意:预定义常量$GLOBALS是一个数组,包括所有的全局变量,使用时只需传入变量的名称。
图2-26 预定义变量的基本运用
2.4.3 变量作用域
变量作用域是指脚本中变量可被引用或使用的部分。PHP中有4种变量作用域,分别为局部作用域、全局作用域、静态作用域和参数作用域。
1. 局部和全局作用域
(1)局部作用域:在PHP函数内部定义的变量是局部变量,仅能在函数内部访问。
(2)全局作用域:在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用global关键字。global关键字用于函数内访问全局变量,也就是在函数内调用函数外定义的全局变量,需要在函数中的变量前加上global关键字。
【例2-19】(实例文件:ch02\Chap2.19.php)局部和全局作用域的实例。
在IE浏览器中运行结果如图2-27所示。
图2-27 局部和全局作用域
在例2-19中定义了$a和$b两个变量,$a变量在函数外定义,所以它是全局变量;$b变量在函数内定义,所以它是局部变量。
当调用test()函数并输出两个变量的值,函数将会输出局部变量$b的值,但是不能输出$a的值,因为$a变量在函数外定义,无法在函数内使用;如果要在一个函数中访问一个全局变量,需要使用global关键字,在例2-19中对全局变量$a使用了关键字global后,页面便输出了变量$a的值。
在Test()函数外输出两个变量的值,函数将会输出全局变量$a的值,但是不能输出$b的值,因为$b变量在函数中定义,属于局部变量。
提示:可以在不同函数中使用相同的变量名称,因为这些函数内定义的变量名是局部变量,只作用于该函数内。
2. 静态作用域
在退出定义变量的函数时,一般变量及相应的值就会被清除。如果希望某个局部变量不被删除,在第一次定义该变量时使用static关键字,这样就把该变量定义成静态变量。
【例2-20】(实例文件:ch02\Chap2.20.php)静态作用域实例。
在IE浏览器中运行结果如图2-28所示。
从例2-20可以发现,一般变量的值每次调用完,再次调用时,前一次的值就会被清除,不会保留;而静态变量每次调用函数完成后,再次调用时,静态变量将会保留着函数前一次被调用时的值。
图2-28 静态作用域
3. 参数作用域
参数是通过调用函数将值传递给函数的局部变量。参数是在参数列表中声明的,作为函数声明的一部分。
【例2-21】(实例文件:ch02\Chap2.21.php)参数作用域。
在IE浏览器中运行结果如图2-29所示。
图2-29 参数作用域
2.4.4 可变变量
可变变量是指一个变量可以动态地改变变量名称,也就是可变变量的名称由另一个变量的值确定。可变变量的格式是在变量的前面再加上一个$符号,如下面实例中的$$a就是一个可变变量。
【例2-22】(实例文件:ch02\Chap2.22.php)可变变量。
在IE浏览器中运行结果如图2-30所示。
从例2-22可以发现,可变变量$$a和普通变量$hi输出的结果是一样的,原因就是可变变量$$a获取了普通变量$a的值hi作为自己的变量名称,等价于$($a的值),也就是变量$hi,所以输出的结果一样。
图2-30 可变变量
2.4.5 来自PHP之外的变量
在一个文件中通过表单提交到另一个文件时,都会以表单的name属性值传递数据,所以这个name属性值就是来自PHP之外的变量。
下面通过一个实例进行介绍。创建form.php文件,通过POST方法提交数据到Chap2.23.php文件,在Chap2.23.php文件中用预定义变量$_POST接受。
【例2-23】(实例文件:ch02\Chap2.23.php)来自PHP之外的变量。
form.php文件:
在IE浏览器中运行form.php文件并输入内容,如图2-31所示;单击“提交”按钮,跳转到Chap2.23.php页面,效果如图2-32所示。
图2-31 form.php页面效果
图2-32 显示接收的数据