忘れるとドツボにはまるPHPの変数の真偽判定

PHPは変数の型定義がないので、よく変数でif判定するときがあるのですが、いろいろな言語をコーディングするとわからなくなるので、要注意です。変数でif判定するときの真偽(TRUE/FALSE)は、booleanへの変換(キャスト)と同じく下記のとおりです。

次の場合は、偽(FALSE)として判定
  • boolean の FALSE
  • integer の 0 (ゼロ)
  • float の 0.0 (ゼロ)
  • 空の文字列、 および文字列の “0”
  • 要素の数がゼロである 配列
  • メンバ変数の数がゼロである オブジェクト (PHP 4のみ)
  • 特別な値 NULL (値がセットされていない変数を含む)
  • 空のタグから作成された SimpleXML オブジェクト

※PHP MANUAL「論理型(boolean)」より参照

ドツボにはまるポイントとしては、strposのような戻り値をif文で判定すると

  1. 「0」… 最初の文字として見つかった
  2. 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など変わる場合があるので、マイグレーションの際のポイントにもなります。