您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)PHP中怎么實(shí)現(xiàn)函數(shù)引用返回,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
引用返回
手冊(cè)里是這么寫的:引用返回用在當(dāng)想用函數(shù)找到引用應(yīng)該被綁定在哪一個(gè)變量上面時(shí)。不要用返回引用來(lái)增加性能,引擎足夠聰明來(lái)自己進(jìn)行優(yōu)化。僅在有合理的技術(shù)原因時(shí)才返回引用!要返回引用
當(dāng)你想將函數(shù)的返回引用綁定到某個(gè)變量時(shí),PHP允許你這么做:
function &returns_reference() { static $someref = 0; $someref++; return $someref; } $newref = &returns_reference();//引用返回,相當(dāng)于 $newref = &$someref; echo $newref; //1 //phpfensi.com $notref = returns_reference(); //值傳遞的是副本 $newref = 100; echo $notref; //2 $newref = 100; echo returns_reference(); //101
可見,想讓函數(shù)返回引用,必須在函數(shù)申明和賦值時(shí)都帶上&操作符.
對(duì)于類中方法也是如此:
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;
一些簡(jiǎn)單的例子
看下面的簡(jiǎn)單例子,嘗試去理解引用返回.
<?php function &test() { // 聲明一個(gè)靜態(tài)變量 static $b = 0; $b = $b+1; echo $b; return $b; } $a = test(); //這條語(yǔ)句會(huì)輸出 $b 的值為 1 $a = 5; $a = test(); //這條語(yǔ)句會(huì)輸出 $b 的值為2 $a = &test(); //這條語(yǔ)句會(huì)輸出 $b 的值為3 $a = 5; $a = test(); //這條語(yǔ)句會(huì)輸出 $b的值 為6 ?> //程序運(yùn)行結(jié)果: 1 2 3 6
盡管函數(shù)聲明方式是 function &test()
這樣,但我們通過(guò)這種方式 $a = test()
的函數(shù)調(diào)用得到的其實(shí)不是函數(shù)的引用返回,這跟普通的函數(shù)調(diào)用沒有區(qū)別。PHP 規(guī)定通過(guò) $a = &test() 這種方式得到的才是函數(shù)的引用返回。
用上面的例子來(lái)解釋就是,$a = test()
這種方式調(diào)用函數(shù),只是將函數(shù)的值賦給 $a 而已,而$a做任何改變都不會(huì)影響到函數(shù)中的$b。
而通過(guò) $a = &test()
方式調(diào)用函數(shù)呢,它的作用是將 return $b
中的 $b 變量的內(nèi)存地址與 $a 變量的內(nèi)存地址指向了同一個(gè)地方。即產(chǎn)生了相當(dāng)于這樣的效果 ($a=&$b
), 所以改變 $a 的值也同時(shí)改變了 $b 的值。
所以在執(zhí)行了
$a = &test(); $a = 5;
以后,$b的值變?yōu)榱?。
再來(lái)個(gè)程序例子加深理解:
<?php /* ** 值傳遞和引用傳遞,值傳遞傳遞的是值的一個(gè)復(fù)本,引用傳遞傳遞的是值指向的內(nèi)存地址 */ // 函數(shù)的引用,定義時(shí)也要加上 & function &func($a,$b){ // 這里為了更直觀看到效果,定義一個(gè)靜態(tài)變量 static $result = 0; $result+=$a+$b; echo $result.'<br />'; return $result; } $a = $b = 10; // PHP里這樣寫函數(shù)的引用調(diào)用,和調(diào)用普通函數(shù)沒有區(qū)別(只是將函數(shù)的返回值復(fù)制給$c這個(gè)變量,$c做任何改變不會(huì)影響上面函數(shù)中的$result) // 要記?。篜HP里的函數(shù)引用定義及調(diào)用都要在函數(shù)名前加上 & $c = func($a,$b); // 第一次執(zhí)行func(),其靜態(tài)變量$result的值變?yōu)?nbsp;20(10+10) // 改變$c的值,不會(huì)對(duì)下面一行語(yǔ)句產(chǎn)生影響 $c = 666; // 第二次執(zhí)行func(),其靜態(tài)變量$result的值變?yōu)?nbsp;40(20+10+10) $c = func($a,$b); echo '<hr />'; // 這樣才是PHP中引用函數(shù)的調(diào)用方式 $d = &func($a,$b); // 第三次執(zhí)行func(),其靜態(tài)變量$result的值變?yōu)?nbsp;40(40+10+10) $d = 888; // 第四次執(zhí)行func(),其靜態(tài)變量$result的值變?yōu)?nbsp;908(888+10+10) $d = func($a,$b); ?>
上述就是小編為大家分享的PHP中怎么實(shí)現(xiàn)函數(shù)引用返回了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。