Ralat penghuraian/sintaks PHP dan cara menyelesaikannya
P粉633075725
2023-08-23 16:16:57
<p>Semua orang menghadapi kesilapan tatabahasa. Malah pengaturcara yang berpengalaman membuat kesilapan. Bagi pendatang baru, ini hanyalah sebahagian daripada proses pembelajaran. Walau bagaimanapun, mesej ralat biasanya mudah ditafsir, contohnya: </p>
<blockquote>
<p>Ralat penghuraian PHP: Ralat sintaks, '{' tidak dijangka dalam baris index.php 20</p>
</blockquote>
<p>Simbol yang tidak dijangka tidak selalu menjadi punca sebenar. Tetapi nombor baris memberikan gambaran kasar tentang tempat untuk mula mencari. </p>
<blockquote>
<p>Sentiasa lihat <strong>konteks kod</strong>. Ralat sintaks selalunya tersembunyi dalam <em> atau </em> yang disebut dalam <strong>baris kod sebelumnya</strong>. Bandingkan kod anda dengan contoh sintaks dalam manual. </p>
</blockquote>
<p>Walaupun tidak semua kes sepadan antara satu sama lain. Walau bagaimanapun, terdapat beberapa langkah umum untuk <strong>menyelesaikan ralat sintaks</strong>.Rujukan ini meringkaskan perangkap biasa: </p>
<ul>
<li><p>T_STRING yang tidak dijangka</p>
</li>
<li><p>T_VARIABLE yang tidak dijangka </p><p>
</li>
<li><p>T_CONSTANT_ENCAPSED_STRING yang tidak dijangka </p><p>T_ENCAPSED_AND_WHITESPACE yang tidak dijangka</p>
</li>
<li><p>Tidak dijangka $end</p>
</li>
<li><p>T_FUNCTION yang tidak dijangka...</p>
</li>
<li><p>Tidak dijangka<kod>{</kod></p><p>Tidak dijangka<kod>}</kod></p><p> (</kod></p><p>Tidak dijangka<kod>)</kod></p>
</li>
<li><p>Tidak dijangka<kod>[</kod></p><p>Tidak dijangka<kod>]</kod></p>
</li>
<li><p>T_IF </p><p></p><p></p><p> p> T_DO Tidak Dijangka </p><p>
</li>
<li><p>T_LNUMBER yang tidak dijangka</p>
</li>
<li><p>Kemalangan?</p>
</li>
<li><p>Sambungan yang tidak dijangka (T_CONTINUE)</p><p>Sambungan yang tidak dijangka (T_BREAK)</p><p>Sambungan yang tidak dijangka (T_RETURN)</p>
</li>
<li><p>Tidak dijangka "="</p>
</li>
<li><p>T_INLINE_HTML yang tidak dijangka…</p>
</li>
<li><p>Tidak dijangka T_INI_INI_PERKARA...</p>
</li>
<li><p>T_OBJECT_OPERATOR yang tidak dijangka...</p>
</li>
<li><p>T_DOUBLE_ARROW yang tidak dijangka...</p>
</li>
<li><p>T_SL yang tidak dijangka...</p>
</li>
<li><p>T_BOOLEAN_OR…
</p><p>
T_BOOLEAN_AND yang tidak dijangka...</p>
</li>
<li><p>T_IS_EQUAL yang tidak dijangka </p><p>
T_IS_GREATER_OR_EQUAL </p><p>
T_IS_IDENTICAL </p><p>
T_IS_NOT_EQUAL yang tidak dijangka </p><p>
T_IS_NOT_IDENTICAL </p><p>
T_IS_SMALLER_OR_EQUAL </p><p>
<kod><</kod></p><p>
<kod>></kod></p>
</li>
<li><p>T_NS_SEPARATOR yang tidak dijangka...</p>
</li>
<li><p>Aksara yang tidak dijangka dalam input: '<code></code>' (ASCII=92) state=1</p>
</li>
<li><p> 'Awam' yang tidak dijangka (T_PUBLIC) </p><p> 'Persendirian' (T_PRIVATE) yang tidak dijangka </p><p>Tidak dijangka 'Dilindungi' (T_LT;PROTECTED) /p><p> 'T_FINAL' yang tidak dijangka...</p>
</li>
<li><p>T_STATIC yang tidak dijangka...</p>
</li>
<li><p>T_CLASS yang tidak dijangka…</p>
</li>
<li><p>'Penggunaan' yang tidak dijangka (T_USE)</p>
</li>
<li><p>T_DNUMBER yang tidak dijangka</p>
</li>
<li><p> <kod>,</kod><em>(koma)</em></p>
</li>
<li><p>Kod<Tidak dijangka>.</kod> <em>(tempoh)</em></p>
</li>
<li><p>Tidak dijangka <kod>;</kod><em>(titik koma)</em></p>
</li>
<li><p>Tidak dijangka<kod>*</kod><em></em></p>
</li>
<li><p>Tidak dijangka<kod>: </kod><em>
</li>
<li><p>Tidak dijangka ':', dijangka ',' atau ')'</p>
</li>
<li><p>Tidak dijangka<kod>&<</kod>
</li>
<li><p>Kod<Tidak dijangka>. </code></p>
</li>
</ul>
<p>Rujukan berkaitan:</p>
<ul>
<li>Apakah maksud ralat ini dalam PHP? (ralat masa jalan)
<ul>
<li>Ralat penghuraian: ralat sintaks, T_XXX</li>
<li>Ralat penghuraian: ralat sintaks, T_ENCAPSED_AND_WHITESPACE yang tidak dijangka</li>
<li>Ralat penghuraian: ralat sintaks, T_VARIABLE tidak dijangka</li>
</ul>
</li>
<li>Apakah maksud simbol ini dalam PHP? (teg bahasa)</li>
<li>Itu<kod>""</code>pintar<kod>''</code>petikan tidak bermakna apa-apa kepada PHP</li>
</ul>
<p>Juga:</p>
<ul>
<li>Manual PHP dan pelbagai teg bahasanya di php.net</li>
<li>Atau pengenalan sintaks Wikipedia kepada PHP. </li>
<li>Akhirnya, sudah tentu, ialah wiki teg <strong>php</strong> </li>
</ul>
<p>Walaupun Stack Overflow mengalu-alukan pengaturcara baru, ia ditujukan terutamanya kepada soalan pengaturcaraan profesional. </p>
<ul>
<li>Jawab ralat pengekodan semua orang dan kesilapan ejaan sempit yang kebanyakannya dianggap di luar topik. </li>
<li>Jadi sebelum menyiarkan permintaan pembetulan sintaks, sila luangkan sedikit masa untuk mengikuti langkah asas. </li>
<li>Jika anda masih perlu melakukan ini, tunjukkan penyelesaian anda sendiri, cuba membetulkan dan proses pemikiran anda untuk apa yang kelihatan sebagai ralat atau apa yang mungkin ralat.</li>
</ul>
<p>Jika <em>Pelayar</em> anda memaparkan mesej ralat seperti "SyntaxError: aksara haram", maka ia sebenarnya tidak berkaitan dengan php, tetapi ralat sintaks javascript. </p>
<hr />
<p><strong>Ralat sintaks yang ditimbulkan oleh kod vendor:</strong>Akhir sekali, pertimbangkan bahawa jika ralat sintaks tidak dibangkitkan dengan mengedit pangkalan kod, tetapi sebaliknya dibangkitkan selepas pakej vendor luaran dipasang atau dinaik taraf , ia mungkin ketidakserasian disebabkan versi PHP, jadi semak keperluan vendor terhadap tetapan platform anda. </p>
Saya rasa topik ini sudah terlalu dibincangkan/terlalu rumit. Menggunakan IDE ialah cara untuk mengelakkan sepenuhnya sebarang ralat sintaks. Saya juga akan mengatakan bahawa bekerja tanpa IDE adalah tidak profesional. kenapa? Kerana IDE moden menyemak sintaks anda selepas setiap aksara yang anda taip. Apabila anda mengekod dan keseluruhan baris bertukar merah dan pemberitahuan amaran besar menunjukkan jenis tepat dan lokasi tepat ralat sintaks, maka tidak perlu mencari penyelesaian lain.
Menggunakan IDE semakan sintaks bermaksud:
Anda (dengan berkesan) tidak akan menghadapi kesilapan tatabahasa lagi kerana anda akan melihatnya dengan betul semasa anda menaip. secara jujur.
IDE hebat dengan semakan sintaks (semua tersedia untuk Linux, Windows dan Mac):
Apakah kesalahan tatabahasa?
PHP kepunyaan C style dan Imperative bahasa pengaturcaraan. Ia mempunyai peraturan sintaks yang ketat yang tidak boleh dipulihkan apabila simbol atau pengecam yang salah tempat ditemui. Ia tidak dapat meneka niat pengekodan anda.
Petua paling penting
Terdapat beberapa langkah berjaga-jaga asas yang sentiasa boleh anda ambil:
Gunakan lekukan kod yang betul, atau pakai mana-mana gaya pengekodan lanjutan. Kebolehbacaan menghalang penyelewengan.
Gunakan IDEatau editor untuk PHP dengan penyertaan sintaks. Ini juga membantu dengan baki kurungan/kurungan.
Baca Rujukan Bahasa dan contoh dalam manual. Selepas dua kali, anda menjadi mahir.
Cara mentafsir ralat penghurai
Mesej ralat sintaks biasa adalah seperti berikut:
Ia menyenaraikan kemungkinan kesilapan tatabahasa. Sila lihat nama fail dan nombor talian yang disebutkan.
A
Ia juga penting untukT_STRING
nama seperti menerangkan pengendalian terakhir simbol yang tidak dapat dihuraikan oleh penghurai/penanda. Walau bagaimanapun, ini tidak semestinya punca ralat sintaks.melihat baris kod sebelumnya. Selalunya, ralat sintaks hanyalah kemalangan yang berlaku sebelum ini. Nombor baris ralat adalah tepat di mana penghurai akhirnya berhenti memproses segala-galanya.
Betulkan kesalahan tatabahasa
Terdapat banyak cara untuk mengecilkan dan menyelesaikan isu tatabahasa.
Buka fail sumber yang disebutkan. Lihat baris kod yang disebutkan.
Dengan rentetan lari dan pengendali yang salah letak, biasanya di sinilah anda mencari pelakunya.
Baca baris dari kiri ke kanan dan bayangkan apa yang dilakukan oleh setiap simbol.
Anda juga perlu menyemak baris sebelumnya dengan lebih kerap.
Secara khusus, koma bertitik
;
tiada di hujung/penyataan baris sebelumnya. (Sekurang-kurangnya dari perspektif gaya.)Jika
{
代码块}
tidak ditutup atau bersarang dengan betul, anda mungkin perlu menyiasat kod sumber dengan lebih lanjut. Gunakan lekukan kod yang betul untuk memudahkan.Lihat Mewarna Tatabahasa!
Rentetan, pembolehubah dan pemalar semuanya harus mempunyai warna yang berbeza.
Operator
+-*/.
juga harus diwarnakan secara berbeza. Jika tidak, mereka mungkin berada dalam persekitaran yang salah.Jika anda mendapati bahawa pewarnaan rentetan anda memanjang terlalu jauh atau terlalu pendek, anda telah menemui penanda rentetan
"
或'
penghujung yang tidak terlepas atau tiada.Dua tanda baca bersebelahan dengan warna yang sama juga boleh bermakna masalah. Biasanya, pengendali bersendirian jika ia tidak diikuti dengan
++
、--
atau kurungan. Dalam kebanyakan kes, dua rentetan/pengecam yang disambungkan secara langsung adalah tidak betul.Ruang kosong ialah kawan anda. Ikuti sebarang gaya pengekodan.
menambah baris baharu antara pengendali atau pemalar dan rentetan. Penghurai kemudiannya akan mengeluarkan nombor baris yang menghuraikan ralat. Daripada melihat kod yang sangat bertele-tele, anda boleh mengasingkan simbol sintaks yang hilang atau salah letak.
.
if
语句拆分为不同的或嵌套的if
Anda boleh mengenal pasti kod yang betul dengan mudah,-
Bahagian yang anda tidak pasti, -
dan baris yang diadukan oleh penghurai. -
Membahagikan blok kod panjangbenar-benar membantu mencari punca ralat sintaks.
Komen keluarkod yang menyinggung perasaan.
bermula dari awal tulis semulabahagian yang dikomen.
kenyataan.
? :
条件运算符可以压缩代码并且确实很有用。但它并不能在所有情况下提高可读性。在不熟悉的情况下更喜欢简单的if
blok.
if:
/elseif:
/endif;
) 对于模板来说很常见,但可以说不太容易遵循正常的{
代码}
untuk menamatkan pernyataan/baris.
Petikan rentetan untuk;
tidak sepadan dan petikan tidak terlepas.
"
或'
penggabungan.
.
. Kira mereka dalam baris yang dilaporkan. Adakah kuantiti mereka sama?
(
括号)
Jangan lupa bahawa menyelesaikan satu masalah tatabahasa boleh mendedahkan masalah seterusnya.
Jika anda menyelesaikan satu masalah tetapi sesuatu yang lain muncul dalam beberapa kod di bawah, anda pada asasnya berada di landasan yang betul.
Jika ralat sintaks baharu muncul dalam baris yang sama selepas mengedit, perubahan percubaan anda mungkin gagal. (Tetapi bukan selalu.)
Jika anda tidak dapat membetulkannya, pulihkan sandaran kod kerja anda yang terdahulu.
差异
. Ia mungkin membantu untuk memahami masalah sintaks.Watak Unicode sesat yang tidak kelihatan : Dalam sesetengah kes, anda perlu gunakan editor hex atau editor/penonton lain pada kod sumber. Sesetengah masalah tidak dapat ditemui hanya dengan melihat kod.
Cuba
grep --color -P -n "[x80-xFF]" file.php
sebagai langkah pertama untuk mencari simbol bukan ASCII.Khususnya, BOM, ruang lebar sifar atau ruang tidak pecah dan petikan pintar sering muncul dalam kod sumber.
Beri perhatian kepada jenis baris baharu yang disimpan dalam fail.
PHP hanya menyokong watak suapan baris n dan tidak menyokong aksara r carriage return.
Ini kadangkala boleh menjadi masalah untuk pengguna MacOS (walaupun pada OS X jika editor salah konfigurasi).
Biasanya hanya digunakan apabila menggunakan baris tunggal
//
或#
注释时才会出现问题。当忽略换行符时,多行/*...*/
Komen jarang mengganggu penghurai.Jika ralat tatabahasa anda tidak dihantar melalui rangkaian: Anda kebetulan mempunyai ralat sintaks pada mesin anda. Tetapi menyiarkan fail yang sama dalam talian tidak lagi menunjukkannya. Ini hanya boleh bermakna satu daripada dua perkara:
Anda melihat fail yang salah!
Atau kod anda mengandungi Unicode sesat yang tidak kelihatan (lihat di atas). Anda boleh mengetahuinya dengan mudah: hanya salin kod dari borang web kembali ke editor teks anda.
Semak versi PHP anda. Tidak semua binaan sintaks tersedia pada setiap pelayan.
php -v
untuk jurubahasa baris arahanUntuk panggilan melalui pelayan web.
Ini tidak semestinya sama. Terutama apabila menggunakan bingkai, anda perlu memadankannya.
Jangan gunakan kata kunci simpanan PHP sebagai fungsi/kaedah, pengecam kelas atau pemalar.
Percubaan dan kesilapan adalah pilihan terakhir.
Jika semuanya gagal, anda sentiasa boleh googlemesej ralat anda. Simbol sintaks kurang mudah dicari (walaupun Stack Overflow itu sendiri diindeks melalui SymbolHound). Oleh itu, anda mungkin perlu menyemak imbas beberapa halaman lagi untuk mencari kandungan yang berkaitan.
Lebih banyak panduan:
Skrin putih kematian
Jika tapak web anda kosong, selalunya ia disebabkan oleh kesilapan tatabahasa. Dayakan paparannya:
error_reporting = E_ALL
display_errors = 1
Dalam
php.ini
php.ini
一般来说,或者通过 mod_php 的.htaccess
Anda secara amnya, atau melalui.htaccess
, Malah.user.ini
menggunakan tetapan FastCGI.Sudah terlambat untuk mendayakannya dalam skrip yang rosak kerana PHP tidak dapat mentafsir/menjalankan baris pertama pun. Penyelesaian pantas ialah membuat skrip pembalut seperti
test.php
:Kod yang gagal kemudian dipanggil dengan mengakses skrip pembalut ini.
Ia juga membantu mendayakan
error_log
并查看您的网络服务器的error.log
PHP apabila skrip ranap dengan respons HTTP 500.