通過5個php實(shí)例細(xì)致說明傳值與傳引用的區(qū)別
Jun 13, 2016 am 11:59 AM
哈哈,會用只是初級階段,要了解原理是什么,這樣才能更好去運(yùn)用,費(fèi)話不多說
傳值:是把實(shí)參的值賦值給行參 ,那么對行參的修改,不會影響實(shí)參的值
傳引用 :真正的以地址的方式傳遞參數(shù)傳遞以后,行參和實(shí)參都是同一個對象,只是他們名字不同而已對行參的修改將影響實(shí)參的值
說明:
傳值:根copy是一樣的。打個比方,我有一橦房子,我給你建筑材料,你建了一個根我的房子一模一樣的房子,你在你的房子做什么事都不會影響到我,我在我的房子里做什么事也不會影響到你,彼此獨(dú)立。
傳引用:讓我想起了上大學(xué)時學(xué)習(xí)C語言的指針了,感覺差不多。打個比方,我有一橦房子,我給你一把鑰匙,我們二個都可以進(jìn)入這個房子,你在房子做什么都會影響到我。
一,php實(shí)例
1,傳值
復(fù)制代碼 代碼如下:
$param1=1; //定義變量1
$param2=2; //定義變量2
$param2 = $param1; //變量1賦值給變量2
echo $param2; //顯示為1
?>
2,傳引用
復(fù)制代碼 代碼如下:
$param2=1; //定義變量2
$param1 = &$param2; //將變量2的引用傳給變量1
echo $param2; //顯示為1
$param1 = 2; //把2賦值給變量1
echo $param2; //顯示為2
?>
3,函數(shù)傳值
復(fù)制代碼 代碼如下:
//傳值
$param1 = 1; //定義變量1
function add($param2) //傳參數(shù)
{
$param2=3; //把3賦值給變量2
}
$param3=add($param1); //調(diào)用方法add,并將變量1傳給變量2
echo '
$param1=='.$param1.'
'; //顯示為$param1==1
echo '
$param2=='.$param2.'
'; //顯示為$param2== 因?yàn)?param2是局部變量,所以不能影響全局
echo '
$param3=='.$param3.'
'; //顯示為$param3== 因?yàn)閍dd方法沒有返回值,所以$param3為空
?>
4,函數(shù)傳引用
復(fù)制代碼 代碼如下:
//傳值
$param1 = 1; //定義變量1
function add(&$param2) //傳參數(shù)
{
$param2=3; //把3賦值給變量2
// return $param2; //返回變量2
}
echo '
$param1=='.$param1.'
'; //顯示為$param1==1 沒對變量1進(jìn)行操作
$param3=add($param1); //調(diào)用方法add,并將變量1的引用傳給變量2
echo '
$param1=='.$param1.'
'; //顯示為$param1==3 調(diào)用變量過程中,$param2的改變影響變量1,雖然沒有return
echo '
$param2=='.$param2.'
'; //顯示為$param2== 因?yàn)?param2局部變量,所以不能影響全局
echo '
$param3=='.$param3.'
'; //顯示為$param3== 如果把方法里面的return注釋去掉的話就為$param3==3
?>
5,函數(shù)傳引用2
復(fù)制代碼 代碼如下:
//傳引用
$param1 = 1;
function &add(&$param2)
{
$param2 = 2;
return $param2;
}
$param3=&add($param1);
$param4=add($param1);
echo '
$param3=='.$param3.'
'; //顯示為$param3==2
echo '
$param4=='.$param4.'
'; //顯示為$param4==2
echo '
$param1=='.$param1.'
'; //顯示為$param1==2 調(diào)用變量過程中,$param2的改變影響變量1
$param3++;
/*下面顯示為$param1==3,這是因?yàn)?param2和$param1引用到同一個地方,
* 返回值前面加了地址符號還是一個引用$param3=&add($param1);
* 這樣$param3,$param2和$param1引用到同一個地方,當(dāng)$param3++;時,
* $param1會被改變*/
echo '
$param1=='.$param1.'
';
$param4++;
/* 下面顯示為$param1==3,這里為什么是3而不是4呢,這是因?yàn)榉祷刂登懊鏇]有
* 地址符號,它不是一個引用所以當(dāng)$param4改變時不會影響$param1*/
echo '
$param1=='.$param1.'
';
?>
哈哈,不過我覺得傳引用會好一點(diǎn),耗的資源少。上面測試沒有明顯的差距,可能是因?yàn)闇y試數(shù)據(jù)不夠大造成的,如果有更大數(shù)據(jù)來測試,我想會有明顯的不同。

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

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

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

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Phpisstillrelevantinmodernenterpriseenvironments.1.modernphp (7.xand8.x) Menawarkan Perpaduan Perlengkapan, ketegangan, jitcompilation, danmodernsyntax, makeitsuatableforlarge-scaleapplications.2.phpintegratefective

Elakkan masalah pertanyaan n 1, mengurangkan bilangan pertanyaan pangkalan data dengan memuatkan data yang berkaitan terlebih dahulu; 2. Pilih hanya medan yang diperlukan untuk mengelakkan memuat entiti lengkap untuk menjimatkan memori dan jalur lebar; 3. Gunakan strategi cache yang munasabah, seperti cache sekunder doktrin atau hasil pertanyaan frekuensi tinggi Cache; 4. Mengoptimumkan kitaran hayat entiti dan panggilan jelas () secara teratur untuk membebaskan memori untuk mengelakkan limpahan memori; 5. Memastikan indeks pangkalan data wujud dan menganalisis penyata SQL yang dihasilkan untuk mengelakkan pertanyaan yang tidak cekap; 6. Lumpuhkan penjejakan perubahan automatik dalam senario di mana perubahan tidak diperlukan, dan gunakan array atau mod ringan untuk meningkatkan prestasi. Penggunaan ORM yang betul memerlukan menggabungkan pemantauan SQL, caching, pemprosesan batch dan pengoptimuman yang sesuai untuk memastikan prestasi aplikasi sambil mengekalkan kecekapan pembangunan.

Untuk membina microservice PHP yang fleksibel, anda perlu menggunakan RabbitMQ untuk mencapai komunikasi asynchronous, 1. Decouple perkhidmatan melalui beratur mesej untuk mengelakkan kegagalan cascade; 2. Konfigurasi beratur berterusan, mesej berterusan, pengesahan pelepasan dan ACK manual untuk memastikan kebolehpercayaan; 3. Menggunakan Backoff Exponential Backoff, TTL dan Kegagalan Pemprosesan Keselamatan Gilir Surat Dead; 4. Gunakan alat seperti penyelia untuk melindungi proses pengguna dan membolehkan mekanisme degupan jantung untuk memastikan kesihatan perkhidmatan; dan akhirnya menyedari keupayaan sistem untuk terus beroperasi dalam kegagalan.

Gunakan subprocess.run () untuk melaksanakan perintah shell dengan selamat dan menangkap output. Adalah disyorkan untuk lulus parameter dalam senarai untuk mengelakkan risiko suntikan; 2. Apabila ciri -ciri shell diperlukan, anda boleh menetapkan shell = benar, tetapi berhati -hati dengan suntikan arahan; 3. Gunakan subprocess.popen untuk merealisasikan pemprosesan output masa nyata; 4. Tetapkan semak = benar untuk membuang pengecualian apabila arahan gagal; 5. Anda boleh secara langsung memanggil rantai untuk mendapatkan output dalam senario mudah; Anda harus memberi keutamaan kepada subprocess.run () dalam kehidupan seharian untuk mengelakkan menggunakan os.system () atau modul yang tidak ditetapkan. Kaedah di atas mengatasi penggunaan teras untuk melaksanakan perintah shell di Python.

Menggunakan imej asas PHP yang betul dan mengkonfigurasi persekitaran docker yang dioptimumkan prestasi yang selamat adalah kunci untuk mencapai pengeluaran siap. 1. Pilih PHP: 8.3-fpm-alpine sebagai imej asas untuk mengurangkan permukaan serangan dan meningkatkan prestasi; 2. Lumpuhkan fungsi berbahaya melalui php.ini adat, matikan paparan ralat, dan aktifkan Opcache dan JIT untuk meningkatkan keselamatan dan prestasi; 3. Gunakan nginx sebagai proksi terbalik untuk menyekat akses kepada fail sensitif dan memajukan permintaan PHP dengan betul kepada PHP-FPM; 4. Gunakan imej pengoptimuman pelbagai peringkat untuk menghapuskan kebergantungan pembangunan, dan menubuhkan pengguna bukan akar untuk menjalankan bekas; 5. Supervisord pilihan untuk menguruskan pelbagai proses seperti Cron; 6. Sahkan bahawa tiada kebocoran maklumat sensitif sebelum penggunaan

Mekanisme pengumpulan sampah PHP didasarkan pada penghitungan rujukan, tetapi rujukan bulat perlu diproses oleh pemungut sampah pekeliling berkala; 1. Rujukan kiraan rujukan segera memori apabila tidak ada rujukan kepada pembolehubah; 2. Rujukan rujukan menyebabkan memori tidak dapat dikeluarkan secara automatik, dan ia bergantung kepada GC untuk mengesan dan membersihkannya; 3. GC dicetuskan apabila zval "akar yang mungkin" mencapai ambang atau panggilan secara manual gc_collect_cycles (); 4. Aplikasi PHP jangka panjang harus memantau gc_status () dan hubungi gc_collect_cycles () dalam masa untuk mengelakkan kebocoran ingatan; 5. Amalan terbaik termasuk mengelakkan rujukan bulat, menggunakan gc_disable () untuk mengoptimumkan bidang utama prestasi, dan objek dereference melalui kaedah CLEAR () ORM.

Fail Tetapan.JSON terletak di laluan peringkat pengguna atau ruang kerja dan digunakan untuk menyesuaikan tetapan vscode. 1. Laluan peringkat pengguna: Windows adalah C: \ Users \\ AppData \ Roaming \ code \ user \ settings.json, macOS adalah /users//library/applicationsupport/code/user/settings.json, linux adalah/ 2. Laluan Tahap Ruang Kerja: .VSCODE/Tetapan dalam Direktori Root Projek

Bref membolehkan pemaju PHP membina aplikasi yang berskala dan kos efektif tanpa menguruskan pelayan. 1.Bref membawa PHP ke Awslambda dengan menyediakan lapisan runtime PHP yang dioptimumkan, menyokong Php8.3 dan versi lain, dan dengan lancar mengintegrasikan dengan rangka kerja seperti Laravel dan Symfony; 2. Langkah -langkah penempatan termasuk: memasang Bref menggunakan komposer, mengkonfigurasi serverless.yml untuk menentukan fungsi dan peristiwa, seperti titik akhir HTTP dan perintah artisan; 3. Jalankan perintah ServerlessDeploy untuk melengkapkan penggunaan, secara automatik mengkonfigurasi apigeway dan menjana URL akses; 4. Bagi sekatan Lambda, Bref menyediakan penyelesaian.
