Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah perbezaan antara nilai lulus dan alamat lulus dalam php

Apakah perbezaan antara nilai lulus dan alamat lulus dalam php

青灯夜游
青灯夜游asal
2021-11-29 18:14:173222semak imbas

Perbezaan: Nilai hantaran bermaksud menyalin kandungan pembolehubah asal dan menyimpannya dalam ruang memori baharu Kedua-dua pembolehubah adalah bebas antara satu sama lain. Rujukan pass-by (pass-by-reference) adalah bersamaan dengan memberikan alias kepada pembolehubah semasa. Sebenarnya, kedua-dua pembolehubah merujuk kepada nilai yang sama, dan mengubah suai satu pembolehubah akan mempengaruhi pembolehubah yang lain.

Apakah perbezaan antara nilai lulus dan alamat lulus dalam php

Persekitaran pengendalian tutorial ini: sistem Windows 7, PHP versi 7.1, komputer DELL G3

Lulus nilai

Pengantaran nilai ialah kaedah penghantaran nilai lalai untuk fungsi dalam PHP, juga dikenali sebagai "salinan melalui nilai". Seperti namanya, kaedah lulus nilai akan menyalin nilai parameter sebenar dan kemudian menyerahkannya kepada parameter formal fungsi, jadi mengendalikan nilai parameter dalam fungsi tidak akan menjejaskan parameter sebenar di luar fungsi. Oleh itu, jika anda tidak mahu fungsi mengubah suai nilai parameter sebenar, anda boleh menghantarnya mengikut nilai.

【Contoh】Yang berikut mentakrifkan fungsi mudah Fungsi ini mempunyai dua parameter, dan nilai parameter ditukar dalam fungsi.

<?php
    function swap($a, $b){
        echo &#39;函数内,交换前 $a = &#39;.$a.&#39;, $b = &#39;.$b.&#39;<br>&#39;;
        $temp = $a;
        $a = $b;
        $b = $temp;
        echo &#39;函数内,交换后 $a = &#39;.$a.&#39;, $b = &#39;.$b.&#39;<br>&#39;;
    }
    $x = 5;
    $y = 7;
    echo &#39;函数外,交换前 $x = &#39;.$x.&#39;, $y = &#39;.$y.&#39;<br>&#39;;
    swap($x, $y);
    echo &#39;函数外,交换后 $x = &#39;.$x.&#39;, $y = &#39;.$y;
?>

Keputusan berjalan adalah seperti berikut:

函数外,交换前 $x = 5, $y = 7
函数内,交换前 $a = 5, $b = 7
函数内,交换后 $a = 7, $b = 5
函数外,交换后 $x = 5, $y = 7

Anda boleh melihat daripada hasil yang dijalankan bahawa nilai memang ditukar dalam fungsi, tetapi tiada perubahan dalam nilai di luar fungsi. Oleh itu, kita boleh mengatakan bahawa menghantar fungsi mengikut nilai hanyalah menghantar salinan pembolehubah. Jadi jika anda mahu fungsi itu boleh beroperasi pada parameter sebenar di luar fungsi, anda perlu menggunakan hantaran rujukan.

Melalui alamat (melalui rujukan)

Melalui rujukan ialah menyalin alamat memori parameter sebenar dan kemudian menghantarnya kepada parameter formal, parameter sebenar dan Parameter formal semuanya menghala ke alamat memori yang sama, jadi operasi fungsi pada parameter formal akan mempengaruhi parameter sebenar di luar fungsi.

Melalui rujukan ialah menghantar alamat memori parameter sebenar kepada parameter rasmi fungsi. Oleh itu, parameter sebenar dan parameter formal menghala ke alamat memori yang sama. Pada masa ini, semua operasi di dalam fungsi akan mempengaruhi nilai parameter sebenar di luar fungsi. Kaedah lulus melalui rujukan ialah menambah simbol & berdasarkan nilai lulus, seperti yang ditunjukkan di bawah:

function name (&参数1, &参数2, ..., &参数3) {
    ...    
}

[Contoh] Laraskan sedikit kod contoh di atas dan gunakan kaedah lulus dengan merujuk kepada fungsi swap Masukkan parameter, kodnya adalah seperti berikut:

<?php
    function swap(&$a, &$b){
        echo &#39;函数内,交换前 $a = &#39;.$a.&#39;, $b = &#39;.$b.&#39;<br>&#39;;
        $temp = $a;
        $a = $b;
        $b = $temp;
        echo &#39;函数内,交换后 $a = &#39;.$a.&#39;, $b = &#39;.$b.&#39;<br>&#39;;
    }
    $x = 5;
    $y = 7;
    echo &#39;函数外,交换前 $x = &#39;.$x.&#39;, $y = &#39;.$y.&#39;<br>&#39;;
    swap($x, $y);
    echo &#39;函数外,交换后 $x = &#39;.$x.&#39;, $y = &#39;.$y;
?>

Keputusan yang dijalankan adalah seperti berikut:

函数外,交换前 $x = 5, $y = 7
函数内,交换前 $a = 5, $b = 7
函数内,交换后 $a = 7, $b = 5
函数外,交换后 $x = 7, $y = 5

Pembelajaran yang disyorkan: "Tutorial Video PHP "

Atas ialah kandungan terperinci Apakah perbezaan antara nilai lulus dan alamat lulus dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn