PHPは変数の型定義がないので、よく変数でif判定するときがあるのですが、いろいろな言語をコーディングするとわからなくなるので、要注意です。変数でif判定するときの真偽(TRUE/FALSE)は、booleanへの変換(キャスト)と同じく下記のとおりです。
次の場合は、偽(FALSE)として判定
- boolean の FALSE
- integer の 0 (ゼロ)
- float の 0.0 (ゼロ)
- 空の文字列、 および文字列の “0”
- 要素の数がゼロである 配列
- メンバ変数の数がゼロである オブジェクト (PHP 4のみ)
- 特別な値 NULL (値がセットされていない変数を含む)
- 空のタグから作成された SimpleXML オブジェクト
※PHP MANUAL「論理型(boolean)」より参照
ドツボにはまるポイントとしては、strposのような戻り値をif文で判定すると
- 「0」… 最初の文字として見つかった
- False … 文字が見つからなかった
がどちらとも偽(FALSE)に判定されてしまいます。対策として「===演算子」を使いましょう!
<?php $str_stack = 'sitespiral'; $str_search = 's'; $result = strpos($str_stack, $str_search); // ===演算子を使いましょう! // 's' が 0 番目 (最初) の文字なので if ($result === false) { echo "Not Found"; } ?>
また、PHPはバージョンによってPHPのコア関数の戻り値がFALSE,NULL,0など変わる場合があるので、マイグレーションの際のポイントにもなります。