函數的返回引用

php手冊的定義:引用返回用在當想用函數找到引用應該被綁定在哪一個變量上面時。不要用返回引用來增加性能,引擎足夠聰明來自己進行優化。僅在有合理的技術原因時才返回引用!

舉例如下:

class foo {
    public $value = 42;


    public function &getValue() {
        return $this->value;
    }
}

$obj = new foo;
$myValue = &$obj->getValue(); // $myvalue=42  這裏等於返回的這個值的地址和$myvalue的內存地址指向了同一個地方
$obj->value = 2;                            //這裏改變了相當於$this->value的值,所以$myvalue的值也會改變
echo $myValue;                //  2

getValue 函數所返回的對象的屬性將被賦值,而不是拷貝,就和沒有用引用語法一樣。

Note: 和參數傳遞不同,這裏必須在兩個地方都用 &符號——指出返回的是一個引用,而不是通常的一個拷貝,同樣也指出 $myValue是作爲引用的綁定,而不是通常的賦值。

然後自己又動手寫了個例子:function &aa($str){
  
  static $abc;               //如果沒有這句話,其實引用傳遞沒有什麼意義,因爲每次函數執行完以後,$abc空間就銷燬了,只在當前執行的函數體裏有作用
  $abc = "hello".$str;
  //echo "<br/>";
  return $abc;


}
$str = "1111";
$a = &aa($str);      //這裏是返回引用的格式了
$str = "2222";        
//echo $a;
aa($str);               //改變了參數的值必須要重新執行下函數,要不然$str還只是外部變量,對函數裏面的$abc不起改變作用的
echo $a;

其實變量的存儲和作用域什麼的很重要的



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章