《PHP實戰:PHP函數引用返回的實例詳解》要點:
本文介紹了PHP實戰:PHP函數引用返回的實例詳解,希望對您有用。如果有疑問,可以聯系我們。
引用返回PHP實例
手冊里是這么寫的:引用返回用在當想用函數找到引用應該被綁定在哪一個變量上面時.不要用返回引用來增加性能,引擎足夠聰明來自己進行優化.僅在有合理的技術原因時才返回引用!要返回引用PHP實例
當你想將函數的返回引用綁定到某個變量時,PHP允許你這么做:PHP實例
function &returns_reference() { static $someref = 0; $someref++; return $someref; } $newref = &returns_reference();//引用返回,相當于 $newref = &$someref; echo $newref; //1 //phpfensi.com $notref = returns_reference(); //值傳遞的是副本 $newref = 100; echo $notref; //2 $newref = 100; echo returns_reference(); //101
可見,想讓函數返回引用,必須在函數申明和賦值時都帶上&操作符.PHP實例
對于類中方法也是如此:PHP實例
class foo { public $value = 0; public function &getValue() { return $this->value; } } $obj = new foo; $myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42. $obj->value = 2; echo $myValue;
一些簡單的例子PHP實例
看下面的簡單例子,嘗試去理解引用返回.PHP實例
<?php function &test() { // 聲明一個靜態變量 static $b = 0; $b = $b+1; echo $b; return $b; } $a = test(); //這條語句會輸出 $b 的值為 1 $a = 5; $a = test(); //這條語句會輸出 $b 的值為2 $a = &test(); //這條語句會輸出 $b 的值為3 $a = 5; $a = test(); //這條語句會輸出 $b的值 為6 ?> //程序運行結果: 1 2 3 6
盡管函數聲明方式是 function &test()
這樣,但我們通過這種方式 $a = test()
的函數調用得到的其實不是函數的引用返回,這跟普通的函數調用沒有區別.PHP 規定通過 $a = &test() 這種方式得到的才是函數的引用返回.PHP實例
用上面的例子來解釋就是,$a = test()
這種方式調用函數,只是將函數的值賦給 $a 而已,而$a做任何改變都不會影響到函數中的$b.PHP實例
而通過 $a = &test()
方式調用函數呢,它的作用是將 return $b
中的 $b 變量的內存地址與 $a 變量的內存地址指向了同一個地方.即產生了相當于這樣的效果 ($a=&$b
), 所以改變 $a 的值也同時改變了 $b 的值.PHP實例
所以在執行了PHP實例
$a = &test(); $a = 5;
以后,$b的值變為了5.PHP實例
再來個程序例子加深理解:PHP實例
<?php /* ** 值傳遞和引用傳遞,值傳遞傳遞的是值的一個復本,引用傳遞傳遞的是值指向的內存地址 */ // 函數的引用,定義時也要加上 & function &func($a,$b){ // 這里為了更直觀看到效果,定義一個靜態變量 static $result = 0; $result+=$a+$b; echo $result.'<br />'; return $result; } $a = $b = 10; // PHP里這樣寫函數的引用調用,和調用普通函數沒有區別(只是將函數的返回值復制給$c這個變量,$c做任何改變不會影響上面函數中的$result) // 要記住:PHP里的函數引用定義及調用都要在函數名前加上 & $c = func($a,$b); // 第一次執行func(),其靜態變量$result的值變為 20(10+10) // 改變$c的值,不會對下面一行語句產生影響 $c = 666; // 第二次執行func(),其靜態變量$result的值變為 40(20+10+10) $c = func($a,$b); echo '<hr />'; // 這樣才是PHP中引用函數的調用方式 $d = &func($a,$b); // 第三次執行func(),其靜態變量$result的值變為 40(40+10+10) $d = 888; // 第四次執行func(),其靜態變量$result的值變為 908(888+10+10) $d = func($a,$b); ?>
總結PHP實例
關于php函數引用返回的內容到這就基本結束了,希望對大家學習或使用PHP函數能有所幫助,如果有疑問大家可以留言交流.謝謝大家對維易PHP的支持.PHP實例
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/3910.html