スタッフブログ

  • 最新配信
  • RSS

if文の条件の書き方

 : PHP 2008/7/30 3:32

Blogger's Avatar

haltです。 皆さんはif文内部に条件を書く時どのように書いていますか? 私の場合、
<?php
$load_error = true;
if ($load_error) {
  exit('error!');
}
とか
if (!in_array($value, array('a','b','c'))) {
  exit("{$value} is not found.");
}
のように、if文の中に変数や関数を直接書いてその結果を判定条件にしています。 が、こういった書き方がすべてだと考えていると必ずハマります。具体的には以下の場合 です。
if (strpos('abc', 'a')) {
  exit('exist!');
}
strposは、第一引数の中に第二引数が存在するか調べ、その文字が見つかった位置を返し ます。見つからなければfalseを返します。 上のプログラムの場合、abcの中にaは含まれているのでifの条件が満たされ、exitでプロ グラムが停止するはずですが実際は停止しません。 い strposが返す文字列位置は0からはじまる為、if文が0をfalseと判い断してしまい、条件>を満たす事ができません。同様のケースとして以下の例があげられます。 http://d.hatena.ne.jp/pirokyun/20080729/1217329949
<?php
$fruit = array('apple', 'orange', 'banana');
if (array_search('apple', $fruit)) {
    return true;
} else {
    return false;
}
?>
array_searchは配列の中から特定の値を含む配列のキーを返す関数なのですが 1番目の配列のキーは0なので0を返し、if文がそれをfalseと判断。結果、配列は値を含ん でいるのに条件分岐の上では含んでいない事になってしまいます。 この問題を避けるには条件の中で変数や関数の結果を直接参照しないで、必ず比較するよ うにする事です。strposの問題やarray_searchの問題は
<?php
if (strpos('abc', 'a') !== false) {
  exit('found!');
}
のようにする事で回避できます。 strposやarray_searchなどphpが用意した関数は覚えてしまったりマニュアルを引いて使>うので慣れればハマる事はありませんが、他人が作った関数などを使う場合は注意したほ うが良いでしょう。

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.