引用返回

引用返回用在當(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。
?>
本例中 getValue 函數(shù)所返回的對(duì)象的屬性將被賦值, 而不是拷貝,就和沒有用引用語(yǔ)法一樣。

注意: 和參數(shù)傳遞不同,這里必須在兩個(gè)地方都用 & 符號(hào)——指出返回的是一個(gè)引用,而不是通常的一個(gè)拷貝,同樣也指出 $myValue 是作為引用的綁定,而不是通常的賦值。

注意: 如果試圖這樣從函數(shù)返回引用:return ($this->value);,這將不會(huì)起作用, 因?yàn)樵谠噲D返回一個(gè)表達(dá)式的結(jié)果而不是一個(gè)引用的變量。 只能從函數(shù)返回引用變量——沒別的方法。

要使用返回的引用,必須使用引用賦值:

<?php
function &collector() {
  static 
$collection = array();
  return 
$collection;
}
$collection = &collector();
$collection[] = 'foo';
?>
要將返回的引用傳遞給另外一個(gè)需要引用的函數(shù),可以使用如下語(yǔ)法:
<?php
function &collector() {
  static 
$collection = array();
  return 
$collection;
}
array_push(collector(), 'foo');
?>

注意: 注意 array_push(&collector(), 'foo'); 起作用,它會(huì)導(dǎo)致 Fatal 錯(cuò)誤。