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