1. 引用是什么
在 PHP 中引用意味着用不同的名字访问同一个变量内容。引用不是指针,并不像 C 的指针:例如你不能对他们做指针运算,他们并不是实际的内存地址……
如果对一个未定义的变量进行引用赋值、引用参数传递或引用返回,则会自动创建该变量。自 PHP 5 起,new 自动返回引用。
PHP中引用分为:变量引用,函数引用,对象引用。
2. 变量引用
两个变量来指向同一个内容 。
例如:$a = &$b; //
$a 和 $b 在这里是完全相同的,这并不是 $a 指向了 $b 或者相反,而是 $a 和 $b 指向了同一个地方。
3. 引用传递
可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。这是通过在函数内建立一个本地变量并且该变量在呼叫范围内引用了同一个内容来实现的。
以下内容可以通过引用传递:
- 变量,例如 foo($a)
- New 语句,例如 foo(new foobar())
-
<?php
function foo(&$var)
{
$var++;
}
$a=5;
foo($a); // $a is 6 here
?>
5. 引用返回
引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!
和参数传递不同,这里必须在两个地方都用 & 符号——指出返回的是一个引用,而不是通常的一个拷贝。
<?php
function
&test() {
static
$b
=0;
//申明一个静态变量
$b
=
$b
+1;
echo
$b
;
return
$b
;
}
$a
=test();
//这条语句会输出$b的值为1
$a
=&test();
//这条语句会输出 $b的值 为2
$a=test() 方式调用函数,只是将函数的值赋给$a而已,而$a做任何改变,都不会影响到函数中的$b,而通过 $a=&test() 方式调用函数呢, 他的作用是将 return $b 中的$b变量的内存地址与$a变量的内存地址,指向了同一个地方,即产生了相当于这样的效果 “$a=&$b;” 所以改变$a的值也同时改变了$b的值。
6. 对象的引用
PHP5中默认就是通过引用来调用对象。例如:$b = new a; $c = $b; 其实等效于 $b = new a; $c = &$b 。 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 . 为了这样的目的,PHP定义了一个特殊的方法,称为__clone.
7. 取消引用
当 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。
$b = &$a; unset($a); //
不会 unset $b,只是 $a。
8. 引用定位
许多 PHP 的语法结构是通过引用机制实现的,所以上述有关引用绑定的一切也都适用于这些结构。
在一个对象的方法中,$this 永远是调用它的对象的引用。