PHP コードエラーを引き起こす状況の分析_PHP チュートリアル

WBOY
リリース: 2016-07-20 10:57:52
オリジナル
999 人が閲覧しました

どんなに注意していても、プログラムを書くときは間違いを犯すことがあります。以下では、PHPにおけるこうした小さなエラーの解析を中心に紹介します。

これらのエラーは通常、PHP コンパイラーを混乱させます。コンパイラ エラー メッセージは役に立たないだけでなく、開発者がメッセージの意味を理解していないとイライラさせられることがよくあります。

プログラムを書くときにどれだけ注意していても、間違いは避けられません。これらのエラーは通常、PHP コンパイラーを混乱させます。コンパイラ エラー メッセージは役に立たないだけでなく、開発者がメッセージの意味を理解していないとイライラさせられることがよくあります。

PHP スクリプトをコンパイルするとき、PHP コンパイラーは、最初に発生した問題を報告するために最善を尽くします。これにより、問題が発生します。PHP は、エラーが発生した場合にのみエラーを識別できます (この問題については、この記事で後ほど詳しく説明します)。このため、コンパイラは、エラーのある行が表面的には構文的に正しいように見えるか、まったく存在しない行である可能性があると指摘します

エラー メッセージをよりよく理解すると、多くの作業を節約できます。エラー内容の特定と修正に費やした時間。そこで、この記事では、さまざまな種類の PHP エラー メッセージと、開発プロセス中にさまざまなエラー メッセージの意味を正しく理解する方法を説明します。

この記事で説明されているさまざまなエラーは特定のバージョンの特定のエラーに限定されないため、この記事で説明されている内容は、使用している PHP のバージョンとは関係ありません。また、プログラミング歴が半年~1年程度の初級・中級プログラマーを想定しています。コンパイラーの仕組み

コンパイラーが特定の行でエラーを報告する理由を理解するには、まずコンパイラーが PHP コードを解析するメカニズムを理解する必要があります。この記事ではこれについて詳しく説明しませんが、エラーにつながる可能性が高いいくつかの単純な概念について説明します。

変数宣言

ステートメント内で変数を宣言する場合、具体的な方法は次のとおりです:

<ol class="dp-c"><li class="alt"><span><span class="vars">$variable</span><span> = </span><span class="string">'value'</span><span>; </span></span></li></ol>
ログイン後にコピー

コンパイラーはまずステートメントの右半分の値 (つまり、すべての値を検索します)等号の右側)。一部のプログラミング書籍では、これはステートメントの RHS (右半分) として表されます。多くの場合、エラーが発生するのはステートメントのこの部分です。間違った構文を使用すると、解析エラーが発生します。

解析エラー

解析エラー:解析エラー、予期せぬ T_WHILE in c:program filesapache groupapachehtdocsscript.php on line 19

解析エラーは、前のエラーが特定されるたびに次々と表示され続けます。 PHP は最初の解析エラーが発生するとスクリプトの実行を停止するため、この一連のエラーのデバッグと修正は特に面倒な作業になることがよくあります。

また、解析エラーの情報はほとんどなく、エラーが発生した行番号はほとんど報告されません。具体的な理由は、エラーが発生すると、無効な構文が見つかるまで、コンパイラが複数の行の構文が有効であると判断するためです。

定義済みの単語には while や function などが含まれます。PHP がコードの評価に uses を使用する場合、変数に名前を付けるためにこれらの定義済みの単語を使用することはできません。そうする必要がある場合、PHP は間違いを犯すほど、より多くの間違いを報告します。我慢できない。

この問題に関しては、次の例が役立つかもしれません。以下に示す PHP コードをお読みください:

<ol class="dp-c"><li class="alt"><span><span class="keyword">while</span><span> = 10; </span><span class="comment">// Bad ? while 就是一个预定义字词,不能分配给一个值</span><span> </span></span></li></ol>
ログイン後にコピー

エラーは "$b=" 行 (ステートメントの最後にセミコロンがありません) にあるため、エラーは "Parse Error: Missing semicolon on line" となるはずです。 3 "そうですか? これはパーサーによって判断されるべきではありません:

解析エラー: 解析エラー、c:program filesapachegroupapachehtdocsereg2.php の 4 行目で予期しない T_IF です

4 行目の if() ステートメントの構文は正しいです。では、コンパイラを混乱させる原因は何でしょうか? 手がかりは「予期しない T_IF」の部分です。 「予期しない T_???」エラーが発生した場合は、事前定義された単語が出現すべきでない位置に出現したことをコンパイラーが検出したことを意味します。 T_IF は if() を表し、T_WHILE は while() を表し、T_FOR は for() を表します。

ありがたいことに、一部のエラーの原因も単純です:

上記の例のように、ステートメントがセミコロン (;) で終わっていません。文字列に引用符がありません。

その他のよくある間違い

私が見た最も一般的な間違いは、関数またはループを終了するために中括弧 ( } ) を使用しない場合です。これはおそらく最も一般的で最もイライラするエラーです。具体的なコードは次のとおりです:

<ol class="dp-c"><li class="alt"><span><span class="vars">$b</span><span> = </span><span class="string">"somevalue"</span><span> </span><span class="keyword">if</span><span>(</span><span class="vars">$b</span><span> == </span><span class="string">"somevalue"</span><span>){ print </span><span class="string">"Hello world!"</span><span>; } ?> </span></span></li></ol>
ログイン後にコピー

次のエラーが生成されます:

Parse error: parse error, Expected $ in c:program filesapache groupapachehtdocsereg2.php on line 9

関数 UselessFunction は、中括弧 (}) を使用してください。最後に、PHP コンパイラーはファイルの最後に到達するまで右中括弧を探し続けます。コンパイラは一致する中括弧を見つけられないため、ファイルの終わりエラーを報告します。

如果正确地反映了代码的层次结构,错误信息就会变得非常明显。如果没有标明代码的层次结构,那么最后要想查清楚到底忘记了什么也会变得几乎是不可能的。所以,请记住,一定要标明代码的层次结构。Tab键可以很容易地实现这一点。对后续的开发人员来说,把握代码框架并对其进行修改也会更容易一些。

MySQL 错误

另一极其令人讨厌的错误信息就是最常见的MySQL错误,这常常使 PHP新手感到颇为头疼:

Warning: Supplied argument is not a valid MySQL result resource in...

上面所报告有错的一行可能是:

<ol class="dp-c"><li class="alt"><span><span class="keyword">while</span><span>(</span><span class="vars">$row</span><span> = mysql_fetch_array(</span><span class="vars">$result</span><span>)) {} </span></span></li></ol>
ログイン後にコピー

参数 $result并不是一个有效的资源。在英语中它表示因为查询失败,将无法处理mysql_fetch_array。任一查询的语法无效(您应该将查询复制-粘贴到MySQL 控制台参考来进行测试),或者与数据库的连接失败(这种情况下您应该再次检查用户名和口令等)。

防止错误发生

第一步,智能代码器可采取以下几步来消除下列错误出现:

  • 在每一条语句的末尾处,不必考虑添加分号——这应该成为一种习惯。
  • 总是要尽可能标明代码的层次结构,这可以使您能够查看是否忘记在if 调用或函数末端等位置添加大括号。
  • 请使用可突出显示语法的编辑器(如 HTML-Kit)。有了这类编辑器的辅助,您就能确定是否忘记了添加引号,是否缺少分号等。

结论

本文我们对PHP编译器可报出的一些看起来可能没有什么意义的错误有了一定的了解。我们需要将所学的知识应用到如何避免错误以及错误出现时如何纠正错误。调试是一个开发人员所有工作中的最重要的部分之一。提高调试效率可大大加快整个工作的进度,缩短完成一项工程所需花费的时间,同时还可以明显减轻代码失败所带来的精神压力。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445737.htmlTechArticle再小心谨慎的人,在编写程序时,还是会犯错的。下面主要介绍 PHP 中的这些小错误的情况分析。 这些错误通常会迷惑PHP编译器。如果开发...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート