PHP の解析/構文エラーとその解決方法
P粉633075725
P粉633075725 2023-08-23 16:16:57
0
2
532
<p>誰もが文法エラーに遭遇することがあります。経験豊富なプログラマーでも間違いを犯します。初心者にとって、これは学習プロセスの一部にすぎません。ただし、エラー メッセージは通常、次のように解釈するのが簡単です。 <ブロック引用> <p>PHP 解析エラー: 構文エラー、index.php 行 20 に予期しない '{'</p> </blockquote> <p>予期しないシンボルが必ずしも真の原因であるとは限りません。ただし、行番号を見れば、どこから見始めればよいかがわかります。 </p> <ブロック引用> <p>常に <strong>コード コンテキスト</strong> を確認してください。構文エラーは、コードの前の行に記載されている <em> または </em> に隠れていることがよくあります。コードをマニュアルの構文例と比較してください。 </p> </blockquote> <p>ただし、すべてのケースが一致するわけではありません。ただし、構文エラーを解決するための一般的な手順がいくつかあります。このリファレンスには、よくある落とし穴がまとめられています。 </p>
    <li><p>予期しない T_STRING</p> </li> <li><p>予期しない T_VARIABLE </p><p>予期しない '$varname' (T_VARIABLE)</p> </li> <li><p>予期しない T_CONSTANT_ENCAPSED_STRING </p><p>予期しない T_ENCAPSED_AND_WHITESPACE</p> </li> <li><p>予期しない $end</p> </li> <li><p>予期しない T_FUNCTION...</p> </li> <li><p>予期しない<code>{</code></p><p>予期しない<code>}</code></p><p>予期しない<code> (</code></p><p>予期せぬ<code>)</code></p> </li> <li><p>予期しない <code>[</code></p><p>予期しない<code>]</code></p> </li> <li><p>予期しない T_IF </p><p>予期しない T_FOREACH </p><p>予期しない T_FOR </p><p>予期しない T_WHILE </ p>< p> 予期しない T_DO </p>gt;<p> 予期しない T_PRINT </p><p> 予期しない T_ECHO</p> </li> <li><p>予期しない T_LNUMBER</p> </li> <li><p>事故?</p> </li> <li><p>予期しない継続 (T_CONTINUE)</p><p>予期しない継続 (T_BREAK)</p><p>予期しない継続 (T_RETURN)</p> </li> <li><p>予期しない "="</p> </li> <li><p>予期しない T_INLINE_HTML…</p> </li> <li><p>予期せぬ T_THIS_IS_THE_THING...</p> </li> <li><p>予期しない T_OBJECT_OPERATOR...</p> </li> <li><p>予期しない T_DOUBLE_ARROW...</p> </li> <li><p>予期しない T_SL...</p> </li> <li><p>予期しない T_BOOLEAN_OR… </p><p> 予期しない T_BOOLEAN_AND…</p> </li> <li><p>予期しない T_IS_EQUAL </p><p> 予期しない T_IS_GREATER_OR_EQUAL </p><p> 予期しない T_IS_IDENTICAL </p><p> 予期しない T_IS_NOT_EQUAL </p><p> 予期しない T_IS_NOT_IDENTICAL </p><p> 予期しない T_IS_SMALLER_OR_EQUAL </p><p> 予期しない <code><</code> </p><p> 予期しない <code>></code></p> </li> <li><p>予期しない T_NS_SEPARATOR...</p> </li> <li><p>入力に予期しない文字があります: '<code></code>' (ASCII=92) state=1</p> </li> <li><p>予期しない 'パブリック' (T_PUBLIC) </p>gt;<p>予期しない 'プライベート' (T_PRIVATE) </p><p>予期しない '保護' (T_PROTECTED ) </ p><p>予期しない 'T_FINAL'...</p> </li> <li><p>予期しない T_STATIC...</p> </li> <li><p>予期しない T_CLASS…</p> </li> <li><p>予期しない「使用」(T_USE)</p> </li> <li><p>予期しない T_DNUMBER</p> </li> <li><p>予期しない <code>、</code> <em>(カンマ)</em></p> </li> <li><p>予期しない<コード>。</code> <em>(ピリオド)</em></p> </li> <li><p>予期しない <code>;</code> <em>(セミコロン)</em></p> </li> <li><p>予期しない<code>*</code><em> (アスタリスク)</em></p> </li> <li><p>予期しない<code>: </code><em> (コロン)</em></p> </li> <li><p>予期しない ':'、予期される ','、または ')'</p> </li> <li><p>予期しない<code>&</code> (呼び出し時に参照によって渡されます)</p> </li> <li><p>予期しない<コード>。 </code></p> </li> </ul> <p>関連資料:</p>
      <li>このエラーは PHP では何を意味しますか? (ランタイムエラー)
        <li>解析エラー: 構文エラー、予期しない T_XXX</li> <li>解析エラー: 構文エラー、予期しない T_ENCAPSED_AND_WHITESPACE</li> <li>解析エラー: 構文エラー、予期しない T_VARIABLE</li> </ul> </li> <li>この記号は PHP では何を意味しますか? (言語タグ)</li> <li>それらの<code>""</code>smart<code>''</code>引用符はPHPにとって何の意味もありません</li> </ul> <p>また:</p>
          <li>PHP マニュアルとそのさまざまな言語タグは php.net</li> <li>または Wikipedia の PHP 構文入門。 </li> <li>最後に、もちろん、<strong>php</strong> タグ Wiki です。 </li> </ul> <p>Stack Overflow は初心者プログラマを歓迎しますが、主に専門的なプログラミングの質問を対象としています。 </p>
            <li>ほとんどが主題から外れていると考えられる、全員のコーディング エラーや狭いスペル ミスに答えます。 </li> <li>したがって、構文修正リクエストを投稿する前に、時間をかけて基本的な手順に従ってください。 </li> <li>それでもこれを行う必要がある場合は、エラーと思われるもの、またはエラーの可能性があるものについて、独自の解決策、試みた修正、および思考プロセスを示してください。</li> </ul> <p><em>ブラウザ</em>「SyntaxError: 無効な文字」などのエラー メッセージが表示される場合、それは実際には PHP に関連するものではなく、JavaScript の構文エラーです。 </p>
            <p><strong>ベンダー コードによって発生する構文エラー:</strong>最後に、構文エラーがコード ベースの編集によって発生するのではなく、外部ベンダー パッケージのインストールまたはアップグレード後に発生するかどうかを考慮してください。 、PHP バージョンによる非互換性の可能性があるため、プラットフォームの設定に対してベンダーの要件を確認してください。 </p>
P粉633075725
P粉633075725

全員に返信(2)
P粉639667504

このトピックは完全に議論されすぎている/過度に複雑だと思います。 IDE を使用すると、構文エラーを完全に回避できます。 IDE なしで作業するのはプロフェッショナルではないとさえ言えます。なぜ?なぜなら、最新の IDE は文字を入力するたびに構文をチェックするからです。コーディング中に行全体が赤になり、大きな警告通知に構文エラーの正確な種類と正確な位置が表示された場合、他の解決策を探す必要はまったくありません。

構文チェック IDE を使用することの意味:

入力時に構文エラーが正しく表示されるため、(事実上) 構文エラーが二度と発生することはありません。正直に。

構文チェック機能を備えた優れた IDE (すべて Linux、Windows、Mac で利用可能):

  1. NetBeans [無料]
  2. PHPStorm [$199]
  3. Eclipse および PHP プラグイン [無料]
  4. Sublime [$80] (主にテキストエディタですが、PHP Grammar Parser などのプラグインで拡張可能)
いいねを押す +0
P粉068510991

構文エラーとは何ですか?

PHP は、C スタイル および Imperative プログラミング言語に属します。厳密な構文規則があり、シンボルや識別子が間違って配置された場合に回復することはできません。コーディングの意図を推測することはできません。

最も重要なヒント

常に講じることができる基本的な予防措置がいくつかあります:

  • 適切な コード インデント を使用するか、高度なコーディング スタイルを採用してください。 可読性により不正を防止します。

  • IDE または 構文強調表示 を備えた PHP 用のエディタを使用します。 これはブラケットとブラケットのバランスにも役立ちます。

  • マニュアルの 言語リファレンスと例を読んでください。 2回もやれば熟練になります。

パーサーエラーの解釈方法

一般的な構文エラー メッセージは次のとおりです。

これには、考えられる 構文エラーがリストされます。前述の filename および linenumber を参照してください。

T_STRING などの 名前は、パーサー/トークナイザーによって解析できないシンボルの最終処理を説明します。ただし、これが必ずしも構文エラーの原因であるとは限りません。

前のコード行 を確認することも重要です。多くの場合、構文エラーは以前に起こった単なる事故です。エラー行番号は、パーサーが最終的にすべての処理を放棄する正確な行番号です。

構文エラーを解決する

構文の問題を絞り込んで修正するには、さまざまな方法があります。

  • 上記のソース ファイルを開きます。前述のコード

    行を見てください。

      暴走した文字列や間違った演算子がある場合、通常はここで原因が見つかります。
    • 行を左から右に読んで、それぞれの記号が何をするかを想像してください。
  • また、
  • 前の行

    をより頻繁に確認する必要があります。

      具体的には、前の行の末尾/ステートメントに
    • ;

      セミコロンがありません。 (少なくともスタイルの観点からは。)

    • {

      コード ブロック} が閉じられていないか、正しくネストされていない場合は、ソース コードをさらに調査する必要がある場合があります。簡略化するには、コードを適切にインデントしてください。

  • 文法の色分け

    を見てください!

      文字列、変数、定数はすべて異なる色にする必要があります。
    • 演算子
    • -*/.

      も異なる色で表示される必要があります。そうしないと、間違った環境にある可能性があります。

    • 文字列の色付けが長すぎるか短すぎる場合は、エスケープされていない、または末尾が欠落している
    • "

      または ' 文字列マーカー .# が見つかりました。

      ##同じ色の 2 つの隣接する句読点も問題を意味する可能性があります。一般に、演算子の後に
    • --、または括弧が続かない場合、演算子は単独です。ほとんどの場合、直接接続された 2 つの文字列/識別子は正しくありません。

  • 空白はあなたの友達です
  • 任意の コーディング スタイルに従ってください。

    長い列を一時的に解消します。
    • 演算子または定数と文字列の間には、自由に 改行を追加できます。次に、パーサーはエラーを解析した行番号を外部化します。非常に冗長なコードを調べる代わりに、欠落している構文記号や間違って配置されている構文記号を特定できます。

    • 複雑な

      if ステートメントを個別の条件またはネストされた if 条件に分割します。

    • 長い数式や論理チェーンを使用する代わりに、一時変数を使用してコードを簡素化します。 (読みやすくなる = エラーが少なくなります。)

    • 間に改行を追加します:

        正しいコードを簡単に識別できます。
      1. 不明な点は、
      2. とパーサーが文句を言う行。

      長いコード ブロックを分割する

      は、構文エラーの原因を特定するのに役立ちます。

  • 違反しているコードをコメントアウトします。

    問題の原因を特定できない場合は、コード ブロックのコメント アウト (それによって一時的に削除) を開始します。
    • 解析エラーを解決すると、問題の原因が判明したことになります。そこをよく見てください。
    • 完全な関数/メソッド ブロックを一時的に削除したい場合があります。 (中括弧が一致せず、コードのインデントが間違っている場合。)
    • 構文の問題が解決できない場合は、
    • 最初からやり直してください。
    • コメントアウトされた部分を書き直してください。

    • 初心者の場合、ややこしい文法構造は避けてください。
  • 三元

    ? :
      条件演算子はコードを要約できるため、非常に便利です。ただし、すべての状況で可読性が向上するわけではありません。不慣れな状況では、単純な
    • if

      ステートメントを使用することを好みます。 PHP の代替構文 (

      if:
    • /
    • elseif:

      /endif;) はテンプレートでは一般的ですが、おそらくそれほどではありません。通常の { code} ブロック。

    • 初心者が犯す最も一般的な間違いは次のとおりです:
  • セミコロン終了ステートメント/行

    ;
      がありません。
    • "
    • または
    • '

      の文字列引用符が一致しません。引用符はエスケープされていません。 忘れられた演算子、特に文字列

      .
    • 連結。
    • アンバランス

      (
    • ブラケット
    • )

      。報告された行でそれらをカウントします。それらの量は等しいですか?

    • 1 つの文法問題を解決すると、次の文法問題が明らかになる可能性があることを忘れないでください。
  • 1 つの問題を解決したが、以下のコードの一部に別の問題が現れた場合、基本的には正しい方向に進んでいます。

    • 編集後に同じ行に新しい構文エラーが表示された場合、変更は失敗する可能性があります。 (しかしいつもではない。) ######

    • 修復できない場合は、以前の動作コードのバックアップを復元してください。

    ソースコードのバージョン管理システムを採用します。破損したバージョンと最後に動作していたバージョンの間の
  • 差異
  • をいつでも確認できます。構文の問題が何であるかを理解するのに役立つかもしれません。


    • 目に見えない Unicode 文字
    • : 場合によっては、ソース コード/ビューアで
    16 進エディタ
  • またはその他のエディタを使用する必要があります。コードを見ただけでは発見できない問題もあります。
    • grep --color -P -n "\[\x80-\xFF\]" file.php を最初に非 ASCII 記号を見つけて試してください測定。

    • 特に、BOM、ゼロ幅スペースまたは非改行スペース、およびスマート引用符がソース コードに頻繁に表示されます。

  • ファイルに保存されている 改行タイプ に注意してください。

    • PHP は \n ライン フィード文字のみをサポートしますが、\r キャリッジ リターン文字はサポートしません。

    • これは、MacOS ユーザーにとって問題になることがあります (エディターの設定が間違っている場合は OS X 上でも)。

    • 通常、問題は単一行の // または # コメントを使用した場合にのみ発生します。改行が無視される場合、複数行の /*...*/ コメントがパーサーに干渉することはほとんどありません。

  • 構文エラーがネットワーク経由で送信されない場合 : たまたまマシンに構文エラーがありました。しかし、同じファイルをオンラインに投稿しても表示されなくなりました。これは次の 2 つのうちの 1 つだけを意味します:

    • 間違ったファイルを表示しています。

    • または、コードに目に見えない浮遊 Unicode が含まれています (上記を参照)。 簡単に見つけることができます。Web フォームのコードをテキスト エディターにコピーするだけです。

  • PHP バージョン を確認してください。すべてのサーバーですべての構文構成が使用できるわけではありません。

    • php -v (コマンドラインインタープリター用)

    • Web サーバー経由で呼び出します。

    これらは必ずしも同じであるとは限りません。特にフレームを使用する場合は、それらを一致させる必要があります。

  • PHP の予約キーワード

    を関数/メソッド、クラス識別子、または定数として使用しないでください。

  • 試行錯誤は最後の手段です。
  • 他のすべてが失敗した場合は、いつでも
google

でエラー メッセージを確認できます。構文シンボルは検索しにくいです (ただし、Stack Overflow 自体は SymbolHound によってインデックス付けされています)。したがって、関連するコンテンツを見つけるには、さらにいくつかのページを参照する必要がある場合があります。 その他のガイド:

サイトが空白の場合、通常は文法上のエラーが原因です。 表示を有効にします:

  • エラー報告 = E_ALL
  • 表示エラー = 1

php.ini一般的に、または mod_php の .htaccess 経由で、 .user.ini でも FastCGI 設定を使用します。

PHP は最初の行を解釈/実行することさえできないため、壊れたスクリプトで有効にするのは遅すぎます。簡単な解決策は、

test.php: のようなラッパー スクリプトを作成することです。 リーリー

次に、このラッパー スクリプトにアクセスすることによって、失敗したコードが呼び出されます。

また、スクリプトが HTTP 500 応答でクラッシュしたときに、PHP の

error_log を有効にして、 Web サーバーの error.log を表示することも役立ちます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!