引用返回用在當(dāng)想用函數(shù)找到引用應(yīng)該被綁定在哪一個(gè)變量上面時(shí)。 不要用返回引用來(lái)增加性能,引擎足夠聰明來(lái)自己進(jìn)行優(yōu)化。 僅在有合理的技術(shù)原因時(shí)才返回引用! 使用此語(yǔ)法返回引用:
<?php
class foo {
public $value = 42;
public function &getValue() {
return $this->value;
}
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue 是對(duì) $obj->value 的引用,即 42。
$obj->value = 2;
echo $myValue; // 打印 $obj->value 的新值,即 2。
?>
注意: 和參數(shù)傳遞不同,這里必須在兩個(gè)地方都用
&
符號(hào)——指出返回的是一個(gè)引用,而不是通常的一個(gè)拷貝,同樣也指出 $myValue 是作為引用的綁定,而不是通常的賦值。
注意: 如果試圖這樣從函數(shù)返回引用:
return ($this->value);
,這將不會(huì)起作用, 因?yàn)樵谠噲D返回一個(gè)表達(dá)式的結(jié)果而不是一個(gè)引用的變量。 只能從函數(shù)返回引用變量——沒(méi)別的方法。
要使用返回的引用,必須使用引用賦值:
<?php
function &collector() {
static $collection = array();
return $collection;
}
$collection = &collector();
$collection[] = 'foo';
?>
<?php
function &collector() {
static $collection = array();
return $collection;
}
array_push(collector(), 'foo');
?>
注意: 注意
array_push(&collector(), 'foo');
將 不 起作用,它會(huì)導(dǎo)致 Fatal 錯(cuò)誤。