[PHP] is判定とexists判定で「Notice」を無くそう

2015年3月13日

PHP プログラミング

PHP5移行になって、デフォルト設定で「Warning」が画面表示されなくなりました。 一昔前は、PHPで作ったページで、syntaxでなくても、warningレベルでも、画面の上部にWorning!!という文字列が表示されている恥ずかしいページを見かけることはよくありました。 PHPのバージョンを上げるだけでwarningが表示されなくなりましたが、実はこれは、「臭いものにフタをしているだけで」根本的な解決にはなっていないことを認識しなければいけません。

Warningに潜んだ問題点

今まではWarning表示がされていたために、そのエラー表示を消すためにプログラムの修正を行っていたので、すぐに修正されていたのですが、上位バージョンで表示されなくなったために、プログラム修正が行われなくなったという事で、 開発員の側で、問題に気づかなくなっている事もかなり大きな問題だと考えられます。 無限ループになっているようなWarningが発生していたとしたら、エラーログ・ファイルには、膨大なレコードが発生し、ディスク容量をすぐに圧迫してしうでしょう。 また、小さなWarningが複数発生して、最終的に重大なエラーになってしまう場合など、根本の原因が追求しずらいという点も問題です。

解決方法

linuxの場合、以下のコマンドで、リアルタイムにErrorやWarningを表示させながら開発を行うといいでしょう。 $ tail -f /var/log/apache/err.log 基本的にerrorログには、warningも含めてレコードを出さない事が健全な状態という事を念頭に置いて、ページ表示した時に、レコード追加されない事を確認しましょう。

プログラム時に気をつけること

PHPでは型に関してあまりうるさくない言語ですが、Warningに関して言えば、多くはこの型の違いから発生する場合が多いです。 PHPには型確認を行う予約関数がいくつか存在しているので、こまめに組み込んで堅牢なシステム構築を行いましょう。

関数サンプル

php.netで確認できます。 http://php.net/manual/ja/ref.var.php 主に使いたい関数

is_string

文字列の確認。数値や配列などと判別ができます。

is_numeric

数値の確認。文字列や配列などと判別ができます。

is_array

配列の確認。文字列や数値などと判別ができます。

is_object

classで宣言しているかどうかの確認。

is_null

null確認ですが、「!」とは違う点を理解しましょう。

method_exists

クラス内の関数の確認。 「function_exists」と同じような機能ですが、クラス内でmethodか変数かの確認は厳密に行う場面はたまにあるので、覚えておいたほうがいいです。 「call_user_func」関数を使う前に必ずチェックするようにしておけばかなりのWarningを防げるでしょう。

最後に

Warningがページ内にでかでかと表示されるのは、言語を使っているデメリットと感じる人が多い中、Notice、Warningレベルであれば表示しなくしたという言語開発元の判断も分からなくないが、ソフトウェアレベルで回避する事は必須という事です。 堅牢を追求する為に、言語の進化を細かくウォッチしましょう。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。