细说PHP-5.3.4变量的引用赋值
变量总是传值赋值。也就是说,当讲一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,当一个变量的值赋予另个一变量时,改变其中一个变量的值,将不会影响到另一个变量。PHP中提供了另一种方式给变量赋值:引用赋值。这意味着新的变量简单地引用了原始变量。改动新的变量将影响到原始变量,反之亦然。这同样意味着其中没有执行赋值操作,因而,这种赋值操作更加快速。不过只有在密集的循环中或者对很大的数组或对象赋值时才有可能注意到速度的提升。使用引用赋值,简单地将一个“&”符号加到要赋值的变量(源变量)前。例如下列代码片段所示:
1 <?php 2 $foo = 'Bob'; //将字符串"Bob"赋给变量$foo 3 $bar = &$foo; //将变量$foo的引用赋值给变量$bar 4 5 $bar = "My name is Tom"; //改变变量$bar的值 6 echo $bar; //变量$bar的值被改变,输出"My name is Tom" 7 echo $foo; //变量$foo的值也被改变,输出"My name is Tom" 8 9 $foo = "your name is Bob"; //改变变量$foo的值 10 echo $bar; //变量$bar的值也被改变,输出"your name is Bob" 11 echo $foo; //变量$foo的值被改变,输出"your name is Bob" 12 ?>
在上面个的代码中,我们并不是将变量$foo的值赋值给变量$bar,而是将$foo的引用赋值给$vbar,这时,$bar相当于是$foo的别名。只要其中的任何一个有所改变,都会影响到另一个变量。有一点重要事项必须指出,那就是只有有名字的变量才可以引用赋值。如下所示:
1 <?php 2 $foo = 25; 3 $bar = &$foo; //这是一个有效地引用赋值 4 $bar = &(24*7); //此引用赋值无效,不能引用表达式做引用赋值 5 6 function test() { 7 return 25; 8 } 9 $bar = &test(); //此引用赋值无效,也是没有名字的变量 10 ?>