PHP基礎之引用的解釋2 引用傳遞和返回

2022-06-08 10:39:10 字數 1311 閱讀 9109

可以將乙個變數通過引用傳遞給函式,這樣該函式就可以修改其引數的值。語法如下:

<?php     function foo(&$var)           $a=5;     foo($a);    // $a is 6 here ?>
注意在函式呼叫時沒有引用符號——只有函式定義中有。光是函式定義就足夠使引數通過引用來正確傳遞了。在最近版本的 php 中如果把 & 用在 foo(&$a); 中會得到一條警告說「call-time pass-by-reference」已經過時了。

以下內容可以通過引用傳遞:

任何其它表示式都不能通過引用傳遞,結果未定義。例如下面引用傳遞的例子是無效的:

<?php     function bar() // note the missing &          foo(bar()); // 自 php 5.0.5 起導致致命錯誤     foo($a = 5) // 表示式,不是變數     foo(5) // 導致致命錯誤 ?>

這些條件是 php 4.0.4 以及以後版本有的。

引用返回用在當想用函式找到引用應該被繫結在哪乙個變數上面時。不要用返回引用來增加效能,引擎足夠聰明來自己進行優化。僅在有合理的技術原因時才返回引用!要返回引用,使用此語法:

<?php     class foo      }      $obj = new foo;     $myvalue = &$obj->getvalue(); // $myvalue is a reference to $obj->value, which is 42.     $obj->value = 2;     echo $myvalue; // prints the new value of $obj->value, i.e. 2. ?>

本例中 getvalue 函式所返回的物件的屬性將被賦值,而不是拷貝,就和沒有用引用語法一樣。

note: 和引數傳遞不同,這裡必須在兩個地方都用 & 符號——指出返回的是乙個引用,而不是通常的乙個拷貝,同樣也指出 $myvalue 是作為引用的繫結,而不是通常的賦值。

note: 如果試圖這樣從函式返回引用:return ($this->value);,這將不會起作用,因為在試圖返回乙個表示式的結果而不是乙個引用的變數。只能從函式返回引用變數——沒別的方法。如果**試圖返回乙個動態表示式或 new 運算子的結果,自 php 4.4.0 和 php 5.1.0 起會發出一條e_notice錯誤。

C 基礎(05) 引用

1 引用就是給變數起乙個別名。其本質就是乙個指標常量 指標指向的位址不可以修改 int a 10 b 是a的別名。b和a所訪問的記憶體是相同的 int b a 2 注意事項 3 引用作為函式的引數 1 函式的引數傳遞可以為 值傳遞 位址傳遞 引用傳遞。其中值傳遞不會改變原來的變數內容,其相當於將原來...

C 基礎05 引用的基礎

變數名實質上是一段連續儲存空間的別名,是乙個標號 門牌號 程式中通過變數來申請並命名記憶體空間 通過變數的名字可以使用儲存空間 屬於c 編譯器對c的擴充套件 不能用c編譯器的角度思考引用 void main 普通引用必須初始化 void swap int a,int b 改變指標所指位址上的值 vo...

PHP7引用型別

php5在引入引用計數後,使用了refcount gc來記錄次數,同時使用is ref gc來記錄是否是引用型別。例如 a hello a zval1 type is string,refcount gc 1,is ref gc 0 這個時候 a指向乙個結構體,主要看refcount gc 1,這就...