Ralat penghuraian/sintaks PHP dan cara menyelesaikannya
P粉633075725
P粉633075725 2023-08-23 16:16:57
0
2
676
<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>
P粉633075725
P粉633075725

membalas semua(2)
P粉639667504

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):

  1. NetBeans [Percuma]
  2. PHPStorm [$199]
  3. Eclipse dan PHP Plugin [Percuma]
  4. Sublime [$80] (Terutamanya editor teks, tetapi boleh dikembangkan dengan pemalam seperti PHP Grammar Parser)
P粉068510991

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 T_STRINGnama seperti menerangkan pengendalian terakhir simbol yang tidak dapat dihuraikan oleh penghurai/penanda. Walau bagaimanapun, ini tidak semestinya punca ralat sintaks.

Ia juga penting untuk

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.

  • Pecahkan barisan panjang buat sementara waktu.

    • Anda boleh secara bebas

      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.

    • Tukar keadaan kompleks

      . if 语句拆分为不同的或嵌套的 if

    • Daripada menggunakan formula matematik yang panjang atau rantai logik, gunakan pembolehubah sementara untuk memudahkan kod anda. (Lebih boleh dibaca = lebih sedikit ralat.)

    • Tambah pemisah baris antara:

        Anda boleh mengenal pasti kod yang betul dengan mudah,
      1. Bahagian yang anda tidak pasti,
      2. dan baris yang diadukan oleh penghurai.

      Membahagikan blok kod panjang

      benar-benar membantu mencari punca ralat sintaks.

  • Komen keluarkod yang menyinggung perasaan.

    • Jika anda tidak dapat mengasingkan punca masalah, mula mengulas (dengan itu memadamkan sementara) blok kod.

    • Sebaik sahaja anda menyelesaikan ralat penghuraian, anda telah menemui punca masalahnya. Lihat lebih dekat di sana.

    • Kadangkala anda ingin mengalih keluar blok fungsi/kaedah yang lengkap buat sementara waktu. (Sekiranya pendakap tidak sepadan dan kod inden yang salah.)

    • Apabila anda tidak dapat menyelesaikan masalah tatabahasa, cuba

      bermula dari awal tulis semulabahagian yang dikomen.

  • Sebagai orang baru, sila elakkan beberapa struktur tatabahasa yang mengelirukan.

    • ternary

      kenyataan. ? : 条件运算符可以压缩代码并且确实很有用。但它并不能在所有情况下提高可读性。在不熟悉的情况下更喜欢简单的 if

    • Sintaks alternatif untuk PHP (

      blok. if:/elseif:/endif;) 对于模板来说很常见,但可以说不太容易遵循正常的 { 代码 }

  • Kesilapan yang biasa dilakukan oleh newbie ialah:

    • Tiada koma bertitik

      untuk menamatkan pernyataan/baris. ;

      Petikan rentetan untuk
    • tidak sepadan dan petikan tidak terlepas. "'

    • Pengendali yang terlupa, terutamanya rentetan

      penggabungan. .

    • Tidak seimbang

      . 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.

    • Menggunakan sistem kawalan versi kod sumber. Anda sentiasa boleh melihat versi rosak dan versi terakhir berfungsi 差异. 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 arahan

    • Untuk 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.iniphp.ini一般来说,或者通过 mod_php 的 .htaccessAnda 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:

<?php
   error_reporting(E_ALL);
   ini_set("display_errors", 1);
   include("./broken-script.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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan