Dalam PHP, hantaran nilai bermaksud menyalin parameter sebenar apabila memanggil fungsi dan kemudian menghantarnya ke parameter formal fungsi Sebenarnya, parameter formal dan parameter sebenar masing-masing menduduki unit storan yang berbeza. Ciri pemindahan nilai ialah pemindahan sehala, iaitu, apabila fungsi panggilan dipanggil, unit storan diperuntukkan kepada parameter formal, dan nilai parameter sebenar dihantar ke parameter formal Selepas panggilan selesai , unit storan parameter formal dikeluarkan, dan nilai parameter formal ialah Sebarang perubahan tidak akan menjejaskan nilai parameter sebenar, dan unit storan parameter sebenar masih mengekalkan dan mengekalkan nilai tidak berubah.
Persekitaran pengendalian tutorial ini: sistem windows7, versi PHP8, komputer DELL G3
Apabila memanggil fungsi, anda perlu lulus parameter kepada fungsi. Parameter yang dihantar ke dalam fungsi dipanggil parameter sebenar, manakala parameter yang ditakrifkan oleh fungsi dipanggil parameter formal. Terdapat empat cara untuk menghantar parameter kepada fungsi, iaitu lulus mengikut nilai, lulus dengan rujukan, parameter lalai dan parameter panjang berubah-ubah.
Pelulusan nilai
Pelulusan nilai ialah kaedah pelulusan 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.
Ciri pemindahan nilai ialah pemindahan sehala, iaitu, apabila fungsi panggilan dipanggil, unit storan diperuntukkan kepada parameter formal, dan nilai parameter sebenar dipindahkan ke parameter formal Selepas panggilan selesai, parameter formal disimpan Unit dikeluarkan, dan sebarang perubahan dalam nilai parameter formal tidak akan menjejaskan nilai parameter sebenar Unit storan parameter sebenar masih mengekalkan dan mengekalkan nilai tidak berubah.
[Contoh] Tentukan fungsi mudah di bawah Fungsi mempunyai dua parameter, dan nilai parameter ditukar dalam fungsi.
<?php function swap($a, $b){ echo '函数内,交换前 $a = '.$a.', $b = '.$b.'<br>'; $temp = $a; $a = $b; $b = $temp; echo '函数内,交换后 $a = '.$a.', $b = '.$b.'<br>'; } $x = 5; $y = 7; echo '函数外,交换前 $x = '.$x.', $y = '.$y.'<br>'; swap($x, $y); echo '函数外,交换后 $x = '.$x.', $y = '.$y; ?>
Keputusan yang dijalankan adalah seperti berikut:
Anda boleh lihat daripada hasil yang dijalankan bahawa dalam fungsi, nilai memang ditukar , manakala di luar fungsi, Nilai berangka tidak berubah. 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 rujukan
Melalui rujukan ialah menyalin alamat memori parameter sebenar dan kemudian menghantarnya kepada parameter formal Kedua-dua parameter dan parameter formal 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 menjejaskan 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 Pas parameter masuk, kodnya adalah seperti berikut:
<?php function swap(&$a, &$b){ echo '函数内,交换前 $a = '.$a.', $b = '.$b.'<br>'; $temp = $a; $a = $b; $b = $temp; echo '函数内,交换后 $a = '.$a.', $b = '.$b.'<br>'; } $x = 5; $y = 7; echo '函数外,交换前 $x = '.$x.', $y = '.$y.'<br>'; swap($x, $y); echo '函数外,交换后 $x = '.$x.', $y = '.$y; ?>
Keputusan yang dijalankan adalah seperti berikut:
Perbezaan hantaran nilai PHP dan hantaran rujukan
Pemindahan nilai: dalam skop fungsi, menukar nilai pembolehubah tidak akan menjejaskan nilai pembolehubah di luar fungsi.
Lulus melalui rujukan: Dalam skop fungsi, sebarang perubahan pada nilai juga ditunjukkan di luar fungsi, kerana lulus melalui rujukan menghantar alamat memori.
Taip dua keping kod dan anda boleh lihat perbezaan antara kedua-duanya Mari kita lihat intipati melalui fenomena
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
Perbezaan antara dua keping kod itu terletak pada. parameter jumlah fungsi Satu adalah untuk lulus nilai $a, dan satu lagi adalah untuk lulus rujukan &$a Hasilnya adalah bahawa nilai $a tidak berubah. nilai $a berubah selepas rujukan diluluskan. Kanak-kanak yang telah mempelajari bahasa C di sini akan memahami apa yang berlaku pada timbunan adalah salinan rujukan.
Memandangkan rujukan menunjuk kepada pembolehubah tertentu, operasi pada rujukan sebenarnya ialah operasi pada pembolehubah yang ditunjukkannya. (Fungsi adalah sama seperti menghantar penunjuk, kecuali tidak perlu menyahrujuk) & ialah simbol yang menunjuk ke alamat pembolehubah Parameter formal &$a dalam jumlah fungsi sebenarnya adalah parameter sebenar $a, jadi masukkannya ke dalam jumlah dan lakukan a + Selepas operasi +, nilai parameter sebenar $a sebenarnya berubah, itu sahaja.
Penjelasan:
Nilai parameter asal dalam nilai pass by kekal sebagai nilai asal selepas memanggil fungsi lain, manakala rujukan pass by menukar nilai asal. Apabila menghantar nilai mengikut kaedah lulus mengikut nilai, jika nilai asal perlu diubah, kod perlu disalin Jika nilainya cukup besar atau ia adalah rentetan yang besar, kod akan menjadi lebih banyak berulang-ulang, sambil lulus dengan rujukan adalah Tidak perlu menyalin kod PHP, yang mempunyai kelebihan besar dalam meningkatkan prestasi.
Untuk lebih banyak pengetahuan berkaitan PHP, sila lawati laman web php Cina!
Atas ialah kandungan terperinci Apakah maksud lulus nilai dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!