ホームページ バックエンド開発 PHPチュートリアル PHP コードエラーを引き起こす状況の分析_PHP チュートリアル

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

Jul 20, 2016 am 10:57 AM
php 人々 コード 分析する 存在する 原因 状態 書く 解析する まだ 間違い

どんなに注意していても、プログラムを書くときは間違いを犯すことがあります。以下では、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编译器。如果开发...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles