エラーメッセージは表示されないのに、動作が変だ

気づきにくい間違い

プログラムミスがあった場合、たいていはエラーになります。 しかし、ミスがあってもエラーにならず、 プログラム自体は実行されることもあります。 ここでは、エラーにはならないが、動作が変になるミスの例を紹介しています。

「==」にするところを「=」にしている

PHPでは、「=」は代入を表します。 等しいかどうかをチェックするときは「==」を利用します。

例えば、if 文の条件判定などに「=」を用いた場合、 「=」は代入を行い「TRUE」を返すため、 if 文が(意図した条件判定ではなく)真になります。

他のプログラム言語でも同じ仕様のことが多いですが、 間違えやすいので注意しましょう。

「empty」は「0」のときも「TRUE」を返す

empty は、変数が空かどうかを調べる関数です。 しかし、変数が定義されていない場合はもちろんですが、 変数が「NULL」、「0」、「FALSE」、空文字列、空配列、 のときにも「TRUE」を返します。

empty のほぼ反対の関数として、 変数が定義されているかを調べる関数 isset があります。 isset は、変数が「NULL」以外の値を持つ場合は真になります。 混同しやすいので注意しましょう。

register_globalsが off になっている。

PHP4.2以降では、外部からの変数(GET、POST)の受け取り方が PHP4.2以前から変更されています。 デフォルトで register_globals が off になっているため、 外部からの変数は $_GET['message'] のような表記が必要になっています。 このため、PHP4.2以前を対象にしたスクリプトは正常に動作しません。

書籍やCD-ROMの改変には手間がかかるため、 現在市販されているPHP書籍の中にも、register_globals が on であることを前提にしているスクリプトが掲載されていることがあります。

mb_ を使わないといけない

日本語を含む文字列の分割、検索などを行う場合は、 マルチバイト対応関数(mb で始まる関数)を使用しましょう。 マルチバイト関数を使用しないと、文字化けするなど、 表示がおかしくなることがあります。

エラー表示がオフになっている

php.ini.htaccessの設定によっては、エラーメッセージを画面に表示しないようになっていることがあります。 エラーログファイル等をチェックしてみましょう。

Copyright (C) 2003-2013. PHP で WEB 作成 All rights reserved.