
2.5 PHP变量
把一个值赋给一个名字,例如把值“明日科技小助手”赋给$name,$name就称为变量。在大多数编程语言中,都把这种情况称为“把值存储在变量中”。在计算机内存中的某个位置,字符串序列"明日科技小助手"已经存在。你不需要知道它们到底在哪里,只需要告诉PHP这个字符串序列的名字是$name,从现在开始就要通过这个名字来引用这个字符串序列。这个过程就像快递存放处一样,内存就像一个巨大的货物架,在PHP中使用变量就像给快递贴标签,如图2.3所示。
顾客的快递存放在货物架上,上面贴着写有编号的标签。当顾客来取快递时,并不需要知道它们存放在这个大型货架的具体位置,只需要提供编号,快递员就会把快递交送到顾客手上。实际上,顾客的快递可能并不在原先所放的位置,不过快递员会记录快递的位置,要取回顾客的快递,只需要提供顾客的编号即可。变量也一样,你不需要知道信息存储在内存中的哪个位置,只需要记住存储变量时所用的名字即可。

图2.3 货物架中贴着标签的快递
2.5.1 变量赋值及使用

在PHP中使用变量之前不需要声明变量(PHP 4之前需要声明变量),只需为变量赋值即可。PHP中的变量名称用“$+标识符”表示。标识符是由字母、数字和下画线组成的,并且不能以数字开头。另外,变量名是区分大小写的。
变量赋值是指给变量赋予一个具体的数据值,对于字符串和数字类型的变量,可以通过“=”来实现,其格式为:

对变量命名时,要遵循变量命名规则。下面的变量命名是合法的:

下面的变量命名则是非法的:

除了直接赋值,还有两种方式可以为变量赋值。一种是变量间的赋值,变量间的赋值是指赋值后两个变量使用各自的内存,互不干扰,代码如下:

结果如下:

变量间的赋值就像在网上买了一个商品,一天后又下单买了相同的商品。这样在快递存放处就有两个一样的快递,这两个快递占用两个不同的货架位置,互不干扰。
另一种是引用赋值。从PHP 4开始,PHP引入了引用赋值的概念。引用赋值的概念是用不同的名字访问同一个变量内容,当改变其中一个变量的值时,另一个变量的值也跟着发生变化。使用&符号来表示引用,例如,变量$j是变量$i的引用,当给变量$i赋值后,$j的值也跟着发生变化。代码如下:

结果如下:

引用赋值就像在填写快递信息时,为避免和因重名被别人误取快递,在“收货人”位置上写了两个名字,一个是真名,另一个是昵称。尽管是两个名字,但却是同一个商品,占用同一个货架。
学习笔记
复制和引用的区别在于:复制是将原变量的内容复制下来,开辟一个新的内存空间来保存,而引用则是给变量的内容再取一个名字。
2.5.2 PHP预定义变量

PHP还提供了很多非常实用的预定义变量,通过这些预定义变量可以获取用户会话、用户操作系统的环境和本地操作系统的环境等信息。常用的预定义变量如表2.5所示。
表2.5 常用的预定义变量
