国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP函數(shù)引用返回的實例詳解

2024-05-04 23:49:44
字體:
供稿:網(wǎng)友

引用返回

手冊里是這么寫的:引用返回用在當(dāng)想用函數(shù)找到引用應(yīng)該被綁定在哪一個變量上面時。不要用返回引用來增加性能,引擎足夠聰明來自己進(jìn)行優(yōu)化。僅在有合理的技術(shù)原因時才返回引用!要返回引用

當(dāng)你想將函數(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ù)申明和賦值時都帶上&操作符.

對于類中方法也是如此:

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;

一些簡單的例子

看下面的簡單例子,嘗試去理解引用返回.

<?phpfunction &test(){ // 聲明一個靜態(tài)變量  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?>//程序運(yùn)行結(jié)果:1236

盡管函數(shù)聲明方式是 function &test() 這樣,但我們通過這種方式 $a = test() 的函數(shù)調(diào)用得到的其實不是函數(shù)的引用返回,這跟普通的函數(shù)調(diào)用沒有區(qū)別。PHP 規(guī)定通過 $a = &test() 這種方式得到的才是函數(shù)的引用返回。

用上面的例子來解釋就是,$a = test() 這種方式調(diào)用函數(shù),只是將函數(shù)的值賦給 $a 而已,而$a做任何改變都不會影響到函數(shù)中的$b。

而通過 $a = &test() 方式調(diào)用函數(shù)呢,它的作用是將 return $b 中的 $b 變量的內(nèi)存地址與 $a 變量的內(nèi)存地址指向了同一個地方。即產(chǎn)生了相當(dāng)于這樣的效果 ($a=&$b), 所以改變 $a 的值也同時改變了 $b 的值。

所以在執(zhí)行了

$a = &test();$a = 5;

以后,$b的值變?yōu)榱?。

再來個程序例子加深理解:

<?php/*** 值傳遞和引用傳遞,值傳遞傳遞的是值的一個復(fù)本,引用傳遞傳遞的是值指向的內(nèi)存地址*/// 函數(shù)的引用,定義時也要加上 &function &func($a,$b){  // 這里為了更直觀看到效果,定義一個靜態(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這個變量,$c做任何改變不會影響上面函數(shù)中的$result)// 要記?。篜HP里的函數(shù)引用定義及調(diào)用都要在函數(shù)名前加上 &$c = func($a,$b); // 第一次執(zhí)行func(),其靜態(tài)變量$result的值變?yōu)?20(10+10)// 改變$c的值,不會對下面一行語句產(chǎn)生影響$c = 666; // 第二次執(zhí)行func(),其靜態(tài)變量$result的值變?yōu)?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)?40(40+10+10)$d = 888;// 第四次執(zhí)行func(),其靜態(tài)變量$result的值變?yōu)?908(888+10+10)$d = func($a,$b);?>

總結(jié)

關(guān)于php函數(shù)引用返回的內(nèi)容到這就基本結(jié)束了,希望對大家學(xué)習(xí)或使用PHP函數(shù)能有所幫助,如果有疑問大家可以留言交流。謝謝大家對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 金华市| 溧阳市| 布尔津县| 舞钢市| 且末县| 冀州市| 安远县| 两当县| 光山县| 宜丰县| 清流县| 桃园市| 冕宁县| 大化| 扶沟县| 郁南县| 岳阳市| 连云港市| 沙洋县| 富裕县| 万安县| 元阳县| 衡东县| 鹰潭市| 南乐县| 呼和浩特市| 清涧县| 罗定市| 滨州市| 德清县| 南康市| 吉安市| 石嘴山市| 邓州市| 西藏| 九龙坡区| 东港市| 南溪县| 淮南市| 鄂托克前旗| 夏邑县|