首頁  >  文章  >  後端開發  >  詳解php中函數的引用傳遞與傳回 (附程式碼)

詳解php中函數的引用傳遞與傳回 (附程式碼)

青灯夜游
青灯夜游轉載
2021-04-02 18:16:543266瀏覽

這篇文章帶大家了解php的引用,詳細介紹一下函數的引用傳遞和引用回傳。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

詳解php中函數的引用傳遞與傳回 (附程式碼)

php的引用(就是在變數或函數、物件等前面加上&符號)

在PHP 中引用的意思是:不同的名字存取同一個變數內容。 
與C語言中的指標是有差異的. C語言中的指標裡面儲存的是變數的內容,在記憶體中存放的位址。

1.變數的引用 

PHP 的引用允許你用兩個變數來指向同一個內容

<?php
    $a = &#39;abc&#39;;
    $b = &$a;
    var_dump($a,$b);//均为&#39;abc&#39;
    $b = 123;
    var_dump($a,$b);//均为123

2.函數的引用傳遞(傳址呼叫)

<?php
    function test(&$a){
        $a = $a + 100;
    }
    $b = 1;
    test($b);
    var_dump($b);//101

這裡$b傳遞給函數的其實是$b的變數內容所處的記憶體位址,透過在函數裡改變$a的值就可以改變$b的值

注意: 

上面的「 test($b); 」中的$b前面不要加上& 符號,但在函數在「call_user_func_array」中,若要引用傳參,就得需要& 符號

<?php
    function test(&$a){
        $a = $a + 10;
    }
    $b = 1;
    call_user_func_array(&#39;test&#39;,array(&$b));
    var_dump($b);//11

3.函數的引用回傳 

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

以此方式$ a=test();得到的其實不是函數的參考返回,這跟普通的函數呼叫沒有差別。 $a=test()方式呼叫函數,只是將函數的值賦給$a而已,而$a做任何改變都不會影響到函數中的$b而透過$a=&test()方式呼叫函數呢,他的作用是將return $b中的$b變數的記憶體位址與$a變數的記憶體位址指向了同一個地方。

這裡是為了讓大家理解函數的引用返回才使用靜態變數的,其實函數的引用傳回多用在物件中:

class talker{
private $data = &#39;Hi&#39;;
    public function &get(){
        return $this->data;
    }
    public function out(){
        echo $this->data;
    }
}
$aa = new talker();
$d = &$aa->get();
$aa->out();
$d = &#39;How&#39;;
$aa->out();
$d = &#39;Are&#39;;
$aa->out();
$d = &#39;You&#39;;
$aa->out(); 
//输出为HiHowAreYou

推薦學習:《PHP影片教學

以上是詳解php中函數的引用傳遞與傳回 (附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除