ホームページ  >  記事  >  バックエンド開発  >  犯しやすい PHP の小さな間違いとそれに対応する分析

犯しやすい PHP の小さな間違いとそれに対応する分析

伊谢尔伦
伊谢尔伦オリジナル
2016-11-25 13:54:04816ブラウズ

プログラムを書くときは、経験豊富なプログラマーでも間違いを犯すことは避けられません。ただし、開発者がこれらのエラーに気付かず、コンパイラ エラー メッセージの意味を理解できない場合、これらのエラー メッセージは役に立たないだけでなく、イライラさせることもよくあります。
エラー メッセージをよりよく理解すると、誤ったコンテンツを見つけて修正するのに費やす時間を大幅に節約できます。そこでこの記事では、PHP プログラムを作成するときによくある間違いと、さまざまな種類の PHP エラー メッセージとその意味を紹介します。また、この記事で説明する内容は使用するPHPのバージョンとは関係ありません。 PHP 学習コンテンツの詳細については、「プログラム内の変数に適切な名前を付ける方法」、「24 の便利な PHP クラス ライブラリ」、および「PHP 配列の詳細な解釈」を参照してください。
コンパイラーが特定の行でエラーを報告する理由を理解するには、まずコンパイラーが PHP コードを解析するメカニズムを理解する必要があります。
変数宣言
次のようにステートメントで変数を宣言すると、
$var = 'value';
コンパイラーは最初にステートメントの右半分の値を見つけます。エラーが発生します。間違った構文を使用すると、解析エラーが発生します。

解析エラー
たとえば、解析エラー: 解析エラー、c:program filesapache groupapachehtdocsscript.phpの19行目で予期しないT_WHILE
前のエラーが特定されるたびに解析エラーが次々と表示され、最初のエラーでPHPが停止しますエラーを解析した後にスクリプトを実行します。また、解析エラーの情報はほとんどなく、エラーが発生した行番号はほとんど報告されません。たとえば、定義済みのキーワードが式で使用されている場合、たとえば、 while = 10; while は定義済みのキーワードであるため、値を割り当てることはできません。事前定義されたキーワードには、while、function などが含まれます。これらの事前定義されたキーワードを変数の名前に使用することはできません。使用しないと、コンパイラによってエラーが報告されます。このうち、T_IFはif()、T_WHILEはwhile()、T_FORはfor()などを表します。

一般的なエラー
ステートメントがセミコロン (;) で終わっていない、文字列内の引用符が欠落しているなど、一般的なエラーもいくつかあります。さらに、関数やループを終了するために中括弧 ( } ) を使用することはありません。例:
function UselessFunction() {
for($i < 0; $i < 10; $i++){

は次のエラーを生成します:
解析エラー: 解析エラー、c:program filesapache groupapachehtdocsereg2.php の 9 行目に予期しない $ があります
関数 UselessFunction は中括弧 (}) で終わっていないため、PHP コンパイラは引き続き検索しますファイルに到達するまで右中括弧を最後まで続けます。コンパイラは一致する中括弧を見つけられないため、ファイルの終わりエラーを報告します。
コードの階層が正しく反映されていれば、エラー メッセージが非常に明確になります。そうしないと、コードのデバッグが非常に困難になります。したがって、コードの階層構造を必ず示すようにしてください。これにより、後続の開発者がコードを改善しやすくなります。

MySQL エラー
別のタイプのエラー メッセージは MySQL エラーです。これは、PHP 初心者に次のような頭痛の種を引き起こすことがよくあります。
警告: 指定された引数は有効な MySQL 結果リソースではありません...
上記で報告されたエラー行は次のようになります:
while($row = mysql_fetch_array($result)) {}
パラメータ $result は有効なリソースではありません。クエリが失敗し、mysql_fetch_array が処理されないためです。クエリの構文が無効であるか、データベースへの接続が失敗する場合は、MySQL コンソールにアクセスしてテストする必要があります。

その他のよくある間違い

1. echo と print の違いに注意してください
PHP では、echo と print は両方とも出力に使用されますが、この 2 つにはまだ微妙な違いがあります。 echo出力後の戻り値はありませんが、printには戻り値があり、実行失敗時にfalseを返します。したがって、通常の関数として使用できます。たとえば、 $r = print "Hello World"; を実行すると、変数 $r の値は 1 になります。さらに、コード内の echo ステートメントは print ステートメントよりもわずかに高速に実行されます。

2. 空の文字列 ('') と NULL の違いに注意してください
PHP では、空の文字列と NULL はどちらも値 0 で格納されますが、前者は文字列、後者は型が異なります。 NULL、文字列 ('') と NULL 値は同じですが、型が異なります。

3. == (等しい AND) と === (一致する AND) の違いを区別します
どちらも比較演算子で、== (等しい) は値が等しいかどうかのみを比較しますが、=== (一致する AND) ) 値が等しいかどうかを比較するだけでなく、型が等しいかどうかも比較します。これはより厳密です。

4. include と require の違いを区別する
include() と require() は基本的に同じ関数ですが、include() は条件付き包含関数であるのに対し、require() は無条件包含関数です。関数 。たとえば、次のコードでは、変数 $a が true の場合、ファイル a.php がインクルードされます。
if($a){
include("a.php")
}
そして、require() は次のようになります。 include() と同じですが、$a の値に関係なく、次のコードにはファイル a.php がインクルードされます。
if($a){
require("a.php")
}
エラー処理は、include ステートメントを使用します。 include エラーが発生した場合、プログラムは include ステートメントをスキップします。エラー メッセージが表示されますが、プログラムは実行を続行します。ただし、require ステートメントでは致命的なエラーが発生します。

5. isset と empty の違いに注意してください
empty は変数が「空」かどうかを判断するのに対し、isset は変数が設定されているかどうかを判断します。

6. self :: と this--> の違いを区別する
PHP クラスのメンバー変数またはメソッドにアクセスするとき、参照される変数またはメソッドが const (定数) または static (静的プロパティ) として宣言されている場合、ドメイン演算子:: を使用する必要があり、参照される変数またはメソッドが const または static として宣言されていない場合は、ポインティング演算子 -> を使用します。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP配列の解析次の記事:PHP配列の解析