最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年09月11日 15:28:10   投稿:daisy  
其實(shí)PHP函數(shù)引用與php中變量引用一樣,都使用的是&符號了,那么今天我們就一起來看看函數(shù)的引用返回的一些例子,有需要的朋友們可以參考借鑒,下面來一起看看吧。

引用返回

手冊里是這么寫的:引用返回用在當(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;

一些簡單的例子

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

<?php
function &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é)果:
1
2
3
6

盡管函數(shù)聲明方式是 function &test() 這樣,但我們通過這種方式 $a = test() 的函數(shù)調(diào)用得到的其實(shí)不是函數(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)
// 要記住:PHP里的函數(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ù)能有所幫助,如果有疑問大家可以留言交流。謝謝大家對腳本之家的支持。

相關(guān)文章

  • Symfony2框架創(chuàng)建項(xiàng)目與模板設(shè)置實(shí)例詳解

    Symfony2框架創(chuàng)建項(xiàng)目與模板設(shè)置實(shí)例詳解

    這篇文章主要介紹了Symfony2框架創(chuàng)建項(xiàng)目與模板設(shè)置的方法,結(jié)合實(shí)例形式詳細(xì)分析了Symfony2框架的具體步驟與詳細(xì)實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-03-03
  • phpmailer發(fā)送郵件功能

    phpmailer發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了phpmailer發(fā)送郵件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • php模板引擎技術(shù)簡單實(shí)現(xiàn)

    php模板引擎技術(shù)簡單實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了php模板引擎技術(shù)簡單實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2016-03-03
  • php版微信公眾號自定義分享內(nèi)容實(shí)現(xiàn)方法

    php版微信公眾號自定義分享內(nèi)容實(shí)現(xiàn)方法

    這篇文章主要介紹了php版微信公眾號自定義分享內(nèi)容實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)微信公眾號自定義分享內(nèi)容的接口調(diào)用與相關(guān)使用技巧,需要的朋友可以參考下
    2016-09-09
  • php基礎(chǔ)設(shè)計模式大全(注冊樹模式、工廠模式、單列模式)

    php基礎(chǔ)設(shè)計模式大全(注冊樹模式、工廠模式、單列模式)

    在所有模式設(shè)計中,有三種基礎(chǔ)設(shè)計模式,單例模式,工廠模式,注冊樹模式,其他模式往往基于這幾種模式,接下來跟著小編一起來學(xué)習(xí)php基礎(chǔ)設(shè)計模式(注冊樹模式、工廠模式、單列模式),需要的朋友快來學(xué)習(xí)吧。
    2015-08-08
  • YII框架關(guān)聯(lián)查詢操作示例

    YII框架關(guān)聯(lián)查詢操作示例

    這篇文章主要介紹了YII框架關(guān)聯(lián)查詢操作,結(jié)合實(shí)例形式分析了Yii框架關(guān)聯(lián)查詢的實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-04-04
  • 最新評論

    旬阳县| 海口市| 松阳县| 沙湾县| 镶黄旗| 城固县| 读书| 武汉市| 含山县| 克山县| 宁陕县| 扎兰屯市| 囊谦县| 鄂托克前旗| 陆河县| 土默特左旗| 揭西县| 布尔津县| 台北市| 始兴县| 蕉岭县| 莱州市| 烟台市| 土默特左旗| 商都县| 玛多县| 龙口市| 巴南区| 霍山县| 渭源县| 漯河市| 景洪市| 潮安县| 肥西县| 上林县| 康乐县| 绵竹市| 雅安市| 大邑县| 深水埗区| 禹城市|