JavaScriptとPHPを書く人は必ず知っておくべきifとundefinedの違い

JavaScriptとPHPのifの違い

PHPはWeb開発に適しており、JavaScriptと同様にHTMLに埋め込むこともできるので、JavaScriptとPHPは同じ人物が書くことがある。

JavaScriptとPHPのifでは判定内容によってはboolean値の結果に違いが出るので注意が必要だ。

JavaScriptでは if ('0') と if (Array()) はtrueを返すが、PHPの if ('0') と if (array()) はfalseを返す。

JavaScriptとPHPのifの違いサンプル

もしPHPのifをJavaScriptのifと同じ結果にしたい場合はif ('0')はorで '0'ならtrueを返して、if (Array())はis_arrayを使用する。

JavaScriptのifをPHPのifと同じ結果にしたい場合はif ('0')はandで'0'でないか判定して、Arrayはandでlengthが0でないか判定すれば同じに結果にできる。

PHPのifをJavaScriptのifの結果と同じにするサンプル

JavaScriptとPHPのundefinedの違い

JavaScriptとPHPではundefinedにも違いがある。

まずPHPでは未定義だと変数には自動的にNULLが入る。

そしてPHPの変数でundefinedを代入するとWarningが発生する。

$foo = undefined;
echo $foo;

// 以下のようなエラーが表示される
// Warning: Use of undefined constant undefined - assumed 'undefined' (this will throw an Error in a future version of PHP) in /home/iwbjp/iwb.jp/public_html/index.php on line 7

そのため、JavaScriptでよくある if ($foo !== undefined) という条件式はPHPでは使用できない。

JavaScriptでいう「$foo !== undefined」はPHPでは isset() を使用して未定義(NULL)でないか判定する。

// PHPでは間違い
if ($foo !== undefined) {
  // 処理
}

// 正しい
if (isset($foo)) {
  // 処理
}

JavaScriptとPHPのifはこう覚える

JavaScriptのifの条件式はfalse, null, 0, undefined, '' (空文字) の5種類のどれかだとfalseを返す。

PHPのifの条件式はJavaScriptのundefinedを除いた4種類の条件に文字列の'0'と空配列の2つを加えた6種類でfalseを返す。

そのため、先にJavaScript側の5種類のfalseになる条件さえ覚えてしまえば、あとはPHPだと'0'と空配列がfalseになると覚えればわかりやすい。

ちなみにJavaScriptのオブジェクトでif ({})はtrueになるが、PHPで空のクラスを定義してオブジェクトを作成してifで判定した場合もtrueとなる。

// クラスを定義
class sampleObj {}

// オブジェクト作成
$obj = new sampleObj();

if ($obj) {
  echo 'true';
} else {
  echo 'false';
}
// => true