Melewati rujukan dan nilai dalam fungsi Pergi ke
Dalam pembangunan PHP, fungsi Pergi ke ialah fungsi yang sangat biasa digunakan yang boleh digunakan untuk mengawal aliran program. Apabila menggunakan fungsi Pergi ke, kami mempunyai dua cara untuk menghantar parameter: dengan rujukan dan nilai. Apabila parameter diluluskan melalui rujukan, pengubahsuaian kepada parameter di dalam fungsi akan mempengaruhi nilai pembolehubah di luar fungsi. Apabila parameter diluluskan mengikut nilai, pengubahsuaian pada parameter di dalam fungsi tidak akan menjejaskan nilai pembolehubah di luar fungsi. Oleh itu, apabila menulis fungsi, kita perlu memilih kaedah pemindahan parameter yang sesuai mengikut keperluan sebenar untuk mencapai logik program yang diharapkan. Dalam artikel ini, saya akan memperkenalkan secara terperinci penggunaan dan perbezaan rujukan lulus dan nilai dalam fungsi Pergi ke untuk membantu pembaca lebih memahami dan menggunakan fungsi PHP yang penting ini.
Kandungan soalan
Saya agak keliru untuk meneruskan rujukan dan nilai dalam perjalanan.
Saya telah melihat penjelasan untuk * di hadapan jenis.
* in front of a type name, means that the declared variable will store an address of another variable of that type (not a value of that type).
Ini tidak masuk akal bagi saya.
Di java, jika saya menghantar contoh pangkalan data kepada fungsi, saya melakukan ini
databasefunction(databasetype db) { // do something }
Tetapi dalam contoh go, saya telah lulus seperti ini.
func puttasks(db *sql.db) echo.handlerfunc { }
Mengapa kita memerlukan asterisk di hadapan jenis?
Berdasarkan helaian tipu ini, saya dapati.
func PrintPerson(p *Person) ONLY receives the pointer address (reference)
Saya tidak faham mengapa saya hanya mahu menghantar alamat penunjuk sebagai parameter.
Penyelesaian
Pertama sekali, pergi secara teknikal hanya mempunyai nilai lulus. Apabila anda menghantar penunjuk kepada objek, anda menghantar penunjuk mengikut nilai, bukan objek dengan rujukan. Perbezaannya adalah halus, tetapi kadangkala relevan. Sebagai contoh, daripada membatalkan rujukannya dan menulis ganti memori yang ditunjukkannya, anda boleh menulis ganti nilai penuding yang tidak mempunyai kesan pada pemanggil.
// *int means you *must* pass a *int (pointer to int), NOT just an int! func someFunc(x *int) { *x = 2 // Whatever variable caller passed in will now be 2 y := 7 x = &y // has no impact on the caller because we overwrote the pointer value! }
Berkenaan soalan anda "Mengapa kita memerlukan asterisk di hadapan jenis?": Asterisk bermaksud nilai itu menunjuk kepada nilai jenis sql.db
类型的指针,而不是 sql.db
. Ini tidak boleh ditukar ganti!
Kenapa hantar alamat penunjuk? Dengan cara ini anda boleh berkongsi nilai antara pemanggil fungsi dan badan fungsi, dan mempunyai perubahan yang dibuat di dalam fungsi yang ditunjukkan dalam pemanggil (cth. penuding ialah satu-satunya cara kaedah "penetap" boleh bertindak pada objek) . Ini sebenarnya yang dilakukan oleh kod java anda juga; dalam java anda sentiasa mengakses objek melalui rujukan (penunjuk), jadi java melakukan ini secara automatik dan bukannya membenarkan anda menyatakannya secara eksplisit. Tetapi dalam perjalanan anda juga boleh mengakses objek melalui penunjuk, jadi anda perlu jelas. Jika anda memanggil fungsi dan menghantar objek secara terus, fungsi itu akan mendapat salinan objek, dan jika fungsi itu mengubah suai objek, pemanggil tidak akan melihat perubahan tersebut. Oleh itu, jika anda mahu perubahan disebarkan di luar fungsi, anda mesti lulus penunjuk. Dengan cara ini, penuding akan disalin, tetapi objek yang ditunjukkannya akan dikongsi.
Lihat juga:Bahagian jelajah tentang penunjuk, Pergi bahagian spesifikasi tentang penunjuk, Pergi ke bahagian spesifikasi tentang pengendali alamat
Atas ialah kandungan terperinci Melewati rujukan dan nilai dalam fungsi Pergi ke. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



OpenSSL, sebagai perpustakaan sumber terbuka yang digunakan secara meluas dalam komunikasi yang selamat, menyediakan algoritma penyulitan, kunci dan fungsi pengurusan sijil. Walau bagaimanapun, terdapat beberapa kelemahan keselamatan yang diketahui dalam versi sejarahnya, yang sebahagiannya sangat berbahaya. Artikel ini akan memberi tumpuan kepada kelemahan umum dan langkah -langkah tindak balas untuk OpenSSL dalam sistem Debian. Debianopenssl yang dikenal pasti: OpenSSL telah mengalami beberapa kelemahan yang serius, seperti: Kerentanan Pendarahan Jantung (CVE-2014-0160): Kelemahan ini mempengaruhi OpenSSL 1.0.1 hingga 1.0.1f dan 1.0.2 hingga 1.0.2 versi beta. Penyerang boleh menggunakan kelemahan ini untuk maklumat sensitif baca yang tidak dibenarkan di pelayan, termasuk kunci penyulitan, dll.

Artikel ini menerangkan cara menggunakan alat PPROF untuk menganalisis prestasi GO, termasuk membolehkan profil, mengumpul data, dan mengenal pasti kesesakan biasa seperti CPU dan isu memori.

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Artikel ini membincangkan perintah Go FMT dalam pengaturcaraan GO, yang format kod untuk mematuhi garis panduan gaya rasmi. Ia menyoroti kepentingan GO FMT untuk mengekalkan konsistensi kod, kebolehbacaan, dan mengurangkan perdebatan gaya. Amalan terbaik untuk

Artikel ini memperkenalkan pelbagai kaedah dan alat untuk memantau pangkalan data PostgreSQL di bawah sistem Debian, membantu anda memahami pemantauan prestasi pangkalan data sepenuhnya. 1. Gunakan PostgreSQL untuk membina pemantauan PostgreSQL sendiri menyediakan pelbagai pandangan untuk pemantauan aktiviti pangkalan data: PG_STAT_ACTIVITY: Memaparkan aktiviti pangkalan data dalam masa nyata, termasuk sambungan, pertanyaan, urus niaga dan maklumat lain. PG_STAT_REPLITI: Memantau status replikasi, terutamanya sesuai untuk kluster replikasi aliran. PG_STAT_DATABASE: Menyediakan statistik pangkalan data, seperti saiz pangkalan data, masa komitmen/masa rollback transaksi dan petunjuk utama lain. 2. Gunakan alat analisis log pgbadg

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...
