PHP 从入门到项目实践(超值版)
上QQ阅读APP看书,第一时间看更新

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 显示接收的数据