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など変わる場合があるので、マイグレーションの際のポイントにもなります。