Saya sedang menjalankan skrip PHP tetapi saya terus mendapat ralat seperti ini:
Notis: Pembolehubah tidak ditentukan: my_variable_name dalam C:wampwwwmypathindex.php pada baris 10
Notis: Indeks tidak ditentukan: my_index C:wampwwwmypathindex.php pada baris 11
Amaran: Kunci tatasusunan tidak ditentukan "my_index" dalam C:wampwwwmypathindex.php pada baris 11
Baris 10 dan 11 kelihatan seperti ini:
echo "My variable value is: " . $my_variable_name; echo "My index value is: " . $my_array["my_index"];
Apakah maksud mesej ralat ini?
Kenapa mereka muncul secara tiba-tiba? Saya telah menggunakan skrip ini selama beberapa tahun dan tidak pernah mengalami sebarang masalah sebelum ini.
Bagaimana untuk membetulkan ralat ini?
Cuba ini
Sebagai alternatif, terdapat penyelesaian yang cepat dan mudah:
Mesej ralat ini bertujuan untuk membantu pengaturcara PHP mengesan kesilapan atau kesilapan semasa mengakses pembolehubah yang tidak wujud (atau elemen tatasusunan). Oleh itu, seorang pengaturcara yang baik hendaklah:
Nota/Amaran: Pembolehubah tidak ditentukan
Walaupun PHP tidak memerlukan pengisytiharan pembolehubah, adalah disyorkan untuk mengisytiharkannya untuk mengelakkan beberapa lubang keselamatan atau pepijat di mana seseorang mungkin terlupa untuk memberikan nilai kepada pembolehubah yang akan digunakan kemudian dalam skrip. Apabila pembolehubah tidak diisytiharkan, PHP mengeluarkan ralat tahap E_WARNING.
Amaran ini membantu pengaturcara mengesan nama pembolehubah yang salah eja atau ralat serupa (cth. memberikan nilai kepada pembolehubah apabila keadaan dinilai sebagai palsu). Selain itu, mungkin terdapat masalah lain yang mungkin berlaku dengan pembolehubah yang tidak dimulakan. Seperti yang dinyatakan dalam manual PHP,
Ini bermakna pembolehubah mungkin mendapat nilai daripada fail yang disertakan dan nilai ini akan digunakan dan bukannya nilai nol yang dijangkakan apabila mengakses pembolehubah yang tidak dimulakan, yang mungkin membawa kepada keputusan yang tidak dapat diramalkan. Untuk mengelakkan ini, adalah idea yang baik untuk memulakan semua pembolehubah dalam fail PHP anda sebelum menggunakannya.
Terdapat beberapa cara untuk menangani masalah ini:
Pendekatan yang disyorkan ialah mengisytiharkan setiap pembolehubah sebelum menggunakannya. Dengan cara ini, anda hanya akan melihat ralat ini jika anda benar-benar membuat kesilapan dan cuba menggunakan pembolehubah yang tidak wujud, itulah sebabnya mesej ralat ini muncul.
Kes khas ialah apabila pembolehubah ditakrifkan tetapi tidak kelihatan dalam fungsi. Dalam PHP, fungsi mempunyai skop pembolehubahnya sendiri Jika anda perlu menggunakan pembolehubah luaran dalam fungsi, nilainya mesti dihantar sebagai parameter fungsi:
Gunakan operator penggabungan nol untuk menyekat ralat. Tetapi perlu diingat bahawa dengan cara ini PHP tidak akan dapat memberitahu anda bahawa anda menggunakan nama pembolehubah yang salah.
Untuk versi PHP purba (< 7.0) isset() dengan ternary boleh digunakan
Sila ambil perhatian bahawa walaupun ini pada asasnya adalah penindasan ralat, ia hanya berfungsi pada ralat tertentu. Oleh itu, ia mungkin menghalang PHP daripada membantu anda dengan menandakan pembolehubah sebagai tidak dimulakan.
Gunakan operator @ untuk menyekat ralat. Ia disimpan di sini atas sebab sejarah, tetapi serius, ini tidak sepatutnya berlaku.
Nota: Sangat disyorkan untuk melaksanakan perkara pertama sahaja.
Nota: indeks tidak ditentukan/offset tidak ditentukan/amaran: kunci tatasusunan tidak ditentukan
Petua/amaran ini muncul apabila anda (atau PHP) cuba mengakses indeks tatasusunan yang tidak ditentukan.
Tatasusunan dalaman
Sikap yang sama harus diguna pakai apabila berurusan dengan tatasusunan dalaman, iaitu tatasusunan yang ditakrifkan dalam kod anda: mulakan semua kunci sebelum digunakan. Dengan cara ini, ralat dapat melakukan tugas yang dimaksudkan: memberitahu pengaturcara tentang ralat dalam kod. Jadi pendekatannya adalah sama:
Cadangan: Isytiharkan elemen tatasusunan:
Kes istimewa ialah apabila fungsi mengembalikan tatasusunan atau nilai lain seperti null atau false. Sebelum cuba mengakses elemen tatasusunan, ujian mesti dilakukan, contohnya:
Tatasusunan luaran
Untuk tatasusunan luaran (seperti $_POST/$_GET/$_SESSION atau input JSON) keadaannya berbeza kerana pengaturcara tidak mempunyai kawalan ke atas kandungan tatasusunan ini. Oleh itu, adalah munasabah untuk menyemak sama ada kunci tertentu wujud atau memberikan nilai lalai kepada kunci yang hilang.
Apabila skrip PHP mengandungi borang HTML, secara semula jadi, tiada kandungan borang pada muat pertama. Oleh itu, skrip sedemikian harus menyemak sama ada borang telah diserahkan.
Sesetengah elemen borang HTML, seperti kotak pilihan, tidak akan dihantar ke pelayan jika ia tidak dipilih. Dalam kes ini, masuk akal untuk menggunakan operator penggabungan nol untuk menetapkan nilai lalai.
Elemen rentetan pertanyaan pilihan atau kuki hendaklah dikendalikan dengan cara yang sama.
Tetapi tugasan harus dilakukan pada awal skrip. Sahkan semua input, tetapkan ia kepada pembolehubah tempatan dan gunakannya sepanjang kod anda. Dengan cara ini, setiap pembolehubah yang anda akses akan wujud dengan sengaja.