PHP变量赋值的2种方式(附带实例)
PHP 程序中,变量的赋值有两种方式,分别是传值赋值和引用赋值。这两种赋值方式在数据的处理方式上存在很大差别。
使用这种赋值方式时,等号两边的变量值互不影响,任何一个变量值的变化都不会影响另一个变量的变量值,如下图所示。

图 1 传值赋值示意
从根本上讲,传值赋值是通过在存储区域复制一个变量的副本来实现的,传值赋值的实例代码如下:
在执行“$b = $a”语句时,系统会在内存中为变量 b 开辟一个存储空间,并将变量 a 所指向的存储空间中的内容复制到变量 b 所指向的存储空间中。
在执行“$b = 44”语句时,系统将在变量 b 所指向的存储空间中保存的值更改为“44”,而在变量 a 所指向的存储空间中保存的值仍然是“33”。
运行结果为:
这种赋值方式并不是真正意义上的为变量赋值,而是相当于一个变量引用另一个变量。在使用引用赋值的时候,两个变量将会指向内存中的同一个存储空间,如下图所示。

图 2 引用赋值示意
在引用赋值中,任何一个变量的变化都会引起另外一个变量的变化。引用赋值的实例代码如下:
【实例】引用赋值
运行结果为:
PHP传值赋值
传值赋值指的是用“=”直接将一个变量(或表达式)的值赋给另一个变量。使用这种赋值方式时,等号两边的变量值互不影响,任何一个变量值的变化都不会影响另一个变量的变量值,如下图所示。

图 1 传值赋值示意
从根本上讲,传值赋值是通过在存储区域复制一个变量的副本来实现的,传值赋值的实例代码如下:
<?php $a=33; $b=$a; $b=44; echo "变量a的值为".$a."<br>"; echo "变量b的值为".$b; ?>在上述代码中,执行“$a = 33”语句时,系统会在内存中为变量a开辟一个存储空间,并将数值“33”存储到该存储空间中。
在执行“$b = $a”语句时,系统会在内存中为变量 b 开辟一个存储空间,并将变量 a 所指向的存储空间中的内容复制到变量 b 所指向的存储空间中。
在执行“$b = 44”语句时,系统将在变量 b 所指向的存储空间中保存的值更改为“44”,而在变量 a 所指向的存储空间中保存的值仍然是“33”。
运行结果为:
变量a的值为33
变量b的值为44
PHP引用赋值
引用赋值同样使用“=”将一个变量的值赋给另一个变量,但是需要在“=”右侧的变量前加上一个“&”符号。这种赋值方式并不是真正意义上的为变量赋值,而是相当于一个变量引用另一个变量。在使用引用赋值的时候,两个变量将会指向内存中的同一个存储空间,如下图所示。

图 2 引用赋值示意
在引用赋值中,任何一个变量的变化都会引起另外一个变量的变化。引用赋值的实例代码如下:
【实例】引用赋值
<?php $a=33; $b=&$a; $b=44; echo "变量a的值为".$a."<br>"; echo "变量b的值为".$b; ?>在上述代码中,执行“$a = 33”语句时,对内存进行操作的过程与传值赋值相同,不再介绍。执行“$b = &$a”语句后,变量 b 将会指向变量 a 所占有的存储空间。在执行“$b = 44”语句后,在变量 b 所指向的存储空间中保存的值变为“44”。此时由于变量 a 也指向此存储空间,所以变量 a 的值也会变为“44”。
运行结果为:
变量a的值为44
变量b的值为44