P粉6396675042023-08-24 12:44:02
このトピックは完全に議論されすぎている/過度に複雑だと思います。 IDE を使用すると、構文エラーを完全に回避できます。 IDE なしで作業するのはプロフェッショナルではないとさえ言えます。なぜ?なぜなら、最新の IDE は文字を入力するたびに構文をチェックするからです。コーディング中に行全体が赤になり、大きな警告通知に構文エラーの正確な種類と正確な位置が表示された場合、他の解決策を探す必要はまったくありません。
入力時に構文エラーが正しく表示されるため、(事実上) 構文エラーが二度と発生することはありません。正直に。
構文チェック機能を備えた優れた IDE (すべて Linux、Windows、Mac で利用可能):
P粉0685109912023-08-24 09:05:03
PHP は、C スタイル および Imperative プログラミング言語に属します。厳密な構文規則があり、シンボルや識別子が間違って配置された場合に回復することはできません。コーディングの意図を推測することはできません。
常に講じることができる基本的な予防措置がいくつかあります:
適切な コード インデント を使用するか、高度なコーディング スタイルを採用してください。 可読性により不正を防止します。
IDE または 構文強調表示 を備えた PHP 用のエディタを使用します。 これはブラケットとブラケットのバランスにも役立ちます。
マニュアルの 言語リファレンスと例を読んでください。 2回もやれば熟練になります。
一般的な構文エラー メッセージは次のとおりです。
これには、考えられる 構文エラーがリストされます。前述の filename および linenumber を参照してください。
T_STRING
などの 名前は、パーサー/トークナイザーによって解析できないシンボルの最終処理を説明します。ただし、これが必ずしも構文エラーの原因であるとは限りません。
前のコード行 を確認することも重要です。多くの場合、構文エラーは以前に起こった単なる事故です。エラー行番号は、パーサーが最終的にすべての処理を放棄する正確な行番号です。
構文エラーを解決する
行を見てください。
をより頻繁に確認する必要があります。
セミコロンがありません。 (少なくともスタイルの観点からは。)
コード ブロック}
が閉じられていないか、正しくネストされていない場合は、ソース コードをさらに調査する必要がある場合があります。簡略化するには、コードを適切にインデントしてください。
を見てください!
も異なる色で表示される必要があります。そうしないと、間違った環境にある可能性があります。
または '
文字列マーカー .# が見つかりました。
--、または括弧が続かない場合、演算子は単独です。ほとんどの場合、直接接続された 2 つの文字列/識別子は正しくありません。
任意の コーディング スタイルに従ってください。
長い列を一時的に解消します。演算子または定数と文字列の間には、自由に 改行を追加できます。次に、パーサーはエラーを解析した行番号を外部化します。非常に冗長なコードを調べる代わりに、欠落している構文記号や間違って配置されている構文記号を特定できます。
if ステートメントを個別の条件またはネストされた
if 条件に分割します。
は、構文エラーの原因を特定するのに役立ちます。
問題の原因を特定できない場合は、コード ブロックのコメント アウト (それによって一時的に削除) を開始します。
コメントアウトされた部分を書き直してください。
三元
? : ステートメントを使用することを好みます。
PHP の代替構文 (
/endif;
) はテンプレートでは一般的ですが、おそらくそれほどではありません。通常の {
code}
ブロック。
セミコロン終了ステートメント/行
;
の文字列引用符が一致しません。引用符はエスケープされていません。
忘れられた演算子、特に文字列
アンバランス
。報告された行でそれらをカウントします。それらの量は等しいですか?
1 つの問題を解決したが、以下のコードの一部に別の問題が現れた場合、基本的には正しい方向に進んでいます。
編集後に同じ行に新しい構文エラーが表示された場合、変更は失敗する可能性があります。 (しかしいつもではない。) ######
修復できない場合は、以前の動作コードのバックアップを復元してください。
grep --color -P -n "\[\x80-\xFF\]" file.php
を最初に非 ASCII 記号を見つけて試してください測定。
特に、BOM、ゼロ幅スペースまたは非改行スペース、およびスマート引用符がソース コードに頻繁に表示されます。
ファイルに保存されている 改行タイプ に注意してください。
PHP は \n ライン フィード文字のみをサポートしますが、\r キャリッジ リターン文字はサポートしません。
これは、MacOS ユーザーにとって問題になることがあります (エディターの設定が間違っている場合は OS X 上でも)。
通常、問題は単一行の //
または # コメントを使用した場合にのみ発生します。改行が無視される場合、複数行の
/*...*/
コメントがパーサーに干渉することはほとんどありません。
構文エラーがネットワーク経由で送信されない場合 : たまたまマシンに構文エラーがありました。しかし、同じファイルをオンラインに投稿しても表示されなくなりました。これは次の 2 つのうちの 1 つだけを意味します:
間違ったファイルを表示しています。
または、コードに目に見えない浮遊 Unicode が含まれています (上記を参照)。 簡単に見つけることができます。Web フォームのコードをテキスト エディターにコピーするだけです。
PHP バージョン を確認してください。すべてのサーバーですべての構文構成が使用できるわけではありません。
php -v (コマンドラインインタープリター用)
Web サーバー経由で呼び出します。
これらは必ずしも同じであるとは限りません。特にフレームを使用する場合は、それらを一致させる必要があります。
でエラー メッセージを確認できます。構文シンボルは検索しにくいです (ただし、Stack Overflow 自体は SymbolHound によってインデックス付けされています)。したがって、関連するコンテンツを見つけるには、さらにいくつかのページを参照する必要がある場合があります。 その他のガイド:
エラー報告 = E_ALL
表示エラー = 1
php.ini一般的に、または mod_php の .htaccess
経由で、
.user.ini
でも FastCGI 設定を使用します。
test.php:
のようなラッパー スクリプトを作成することです。
リーリー
また、スクリプトが HTTP 500 応答でクラッシュしたときに、PHP の
error_log を有効にして、
Web サーバーの error.log を表示することも役立ちます。