php值傳遞指的是什么

這篇文章主要介紹了php值傳遞指的是什么的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇php值傳遞指的是什么文章都會(huì)有所收獲,下面我們一起來看看吧。

專注于為中小企業(yè)提供網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)山西免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

在php中,值傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)復(fù)制一份再傳遞給函數(shù)的形參,實(shí)際上形參和實(shí)參分別占用不同的存儲(chǔ)單元。值傳遞的特點(diǎn)是單向傳遞,即主調(diào)函數(shù)調(diào)用時(shí)給形參分配存儲(chǔ)單元,把實(shí)參的值傳遞給形參,在調(diào)用結(jié)束后,形參的存儲(chǔ)單元被釋放,而形參值的任何變化都不會(huì)影響到實(shí)參的值,實(shí)參的存儲(chǔ)單元仍保留并維持?jǐn)?shù)值不變。

在調(diào)用函數(shù)時(shí),需要向函數(shù)傳遞參數(shù),被傳入函數(shù)的參數(shù)稱為實(shí)參,而函數(shù)定義的參數(shù)稱為形參。而向函數(shù)傳遞參數(shù)的方式有四種,分別是值傳遞、引用傳遞、默認(rèn)參數(shù)和可變長度參數(shù)。

值傳遞

值傳遞是 PHP 中函數(shù)的默認(rèn)傳值方式,也稱為“拷貝傳值”。顧名思義值傳遞的方式會(huì)將實(shí)參的值復(fù)制一份再傳遞給函數(shù)的形參,所以在函數(shù)中操作參數(shù)的值并不會(huì)對(duì)函數(shù)外的實(shí)參造成影響。因此如果不希望函數(shù)修改實(shí)參的值,就可以通過值傳遞的方式。

值傳遞的特點(diǎn)是單向傳遞,即主調(diào)函數(shù)調(diào)用時(shí)給形參分配存儲(chǔ)單元,把實(shí)參的值傳遞給形參,在調(diào)用結(jié)束后,形參的存儲(chǔ)單元被釋放,而形參值的任何變化都不會(huì)影響到實(shí)參的值,實(shí)參的存儲(chǔ)單元仍保留并維持?jǐn)?shù)值不變。

【示例】下面定義一個(gè)簡單的函數(shù),函數(shù)有兩個(gè)參數(shù),在函數(shù)中交換參數(shù)的值。

<?php
    function swap($a, $b){
        echo '函數(shù)內(nèi),交換前 $a = '.$a.', $b = '.$b.'<br>';
        $temp = $a;
        $a = $b;
        $b = $temp;
        echo '函數(shù)內(nèi),交換后 $a = '.$a.', $b = '.$b.'<br>';
    }
    $x = 5;
    $y = 7;
    echo '函數(shù)外,交換前 $x = '.$x.', $y = '.$y.'<br>';
    swap($x, $y);
    echo '函數(shù)外,交換后 $x = '.$x.', $y = '.$y;
?>

運(yùn)行結(jié)果如下:

php值傳遞指的是什么

通過運(yùn)行結(jié)果可以看到,在函數(shù)內(nèi),數(shù)值確實(shí)是交換了,而在函數(shù)外部,數(shù)值卻沒有變化。因此可以說,函數(shù)的值傳遞只是傳遞變量的副本。那么要是想讓函數(shù)能夠操作函數(shù)外實(shí)參的話,就需要使用引用傳遞的方式了。

引用傳遞

參數(shù)的引用傳遞就是把實(shí)參的內(nèi)存地址復(fù)制一份,然后傳遞給函數(shù)的形參,實(shí)參和形參都指向同一個(gè)內(nèi)存地址,因此函數(shù)對(duì)形參的操作,會(huì)影響到函數(shù)外的實(shí)參。

按引用傳遞就是將實(shí)參的內(nèi)存地址傳遞到函數(shù)的形參中。因此實(shí)參和形參指向的是同一個(gè)內(nèi)存地址。這時(shí)在函數(shù)內(nèi)部的所有操作都會(huì)影響到函數(shù)外實(shí)參的值。引用傳遞的方式就是在值傳遞的基礎(chǔ)上加上一個(gè)&符號(hào),如下所示:

function name (&參數(shù)1, &參數(shù)2, ..., &參數(shù)3) {
    ...    
}

【示例】將上面示例的代碼略作調(diào)整,使用引用傳遞的方式向 swap 函數(shù)中傳遞參數(shù),代碼如下所示:

<?php
    function swap(&$a, &$b){
        echo '函數(shù)內(nèi),交換前 $a = '.$a.', $b = '.$b.'<br>';
        $temp = $a;
        $a = $b;
        $b = $temp;
        echo '函數(shù)內(nèi),交換后 $a = '.$a.', $b = '.$b.'<br>';
    }
    $x = 5;
    $y = 7;
    echo '函數(shù)外,交換前 $x = '.$x.', $y = '.$y.'<br>';
    swap($x, $y);
    echo '函數(shù)外,交換后 $x = '.$x.', $y = '.$y;
?>

運(yùn)行結(jié)果如下:

php值傳遞指的是什么

php值傳遞和引用傳遞的區(qū)別

值傳遞:在函數(shù)范圍內(nèi),改變變量值得大小,都不會(huì)影響到函數(shù)外邊的變量值。

引用傳遞:在函數(shù)范圍內(nèi),對(duì)值的任何改變,在函數(shù)外部也有所體現(xiàn),因?yàn)閭饕脗鞯氖莾?nèi)存地址。

敲兩段代碼然后就可以看出兩者的區(qū)別,咱們透過現(xiàn)象看本質(zhì)

function sum($a){
  $a++;
  $b = $a;
  return $b;
}
$a = 10;
echo sum($a).'<br />';//11
echo $a;//10
function sum(&$a){
  $a++;
  $b = $a;
  return $b;
}
$a = 10;
echo sum($a).'<br />';//11
echo $a;//11

兩段代碼的差別在于函數(shù)sum的參數(shù)上,一個(gè)是傳值$a,另一個(gè)是傳引用&$a,其結(jié)果是傳值過后$a的值最終沒有發(fā)生改變,反之傳引用過后$a的值發(fā)生了變化。這里學(xué)過C語言的童鞋就明白是怎么回事了,壓棧的是引用的副本。

由于引用是指向某個(gè)變量的,對(duì)引用的操作其實(shí)就是對(duì)他指向的變量的操作。(作用和傳指針一樣,只是不用解引用) &是指向某個(gè)變量地址的符號(hào),函數(shù)sum中的形參&$a實(shí)際上就是實(shí)參$a,那么將其傳進(jìn)sum中進(jìn)行了一次++運(yùn)算之后,實(shí)參$a的值實(shí)際上也就發(fā)生了改變,就是這么回事。

說明:

按值傳遞中原來參數(shù)的值在調(diào)用其他函數(shù)之后還是原來的值,而引用傳遞則是改變了原來的值。按照按值傳遞的做法來傳值時(shí),如果需要原來的值發(fā)生改變,則需要在進(jìn)行代碼復(fù)制,若是值夠大或者是一大串字符串時(shí),會(huì)使代碼比較多,重復(fù),而引用傳遞則不需要復(fù)制PHP代碼,對(duì)提高性能這一個(gè)方面有很大的優(yōu)勢。

關(guān)于“php值傳遞指的是什么”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“php值傳遞指的是什么”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享題目:php值傳遞指的是什么
本文來源:http://muchs.cn/article44/pdgche.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)品牌網(wǎng)站制作、網(wǎng)站維護(hù)、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管