文字列の値を判定する際には、有効な文字列であるかどうかや空でないかどうかを気にします。通常、渡された値がNULLか空の文字列であるかどうかをチェックします。
そのとき、最初に思い浮かぶのはIF条件文ですよね。
IF条件式は、プログラミングの中で最もよく使われる便利なものだと思います。条件を設定し、結果がTRUEかFALSEかによって処理を分岐させることができます。パラメータの値を基本的にチェックする際には、ほとんどの場合、欲しい値に合致しているかどうかを判断するためにIF条件式を使用します。
FALSEかの判定に対して、最も簡単で便利な方法は、プログラミング言語におけるデータ値のTRUEかFALSEの判定を利用することです。よく知られているJavaScriptとして、FALSEと判定されるデータ値は以下の通りです:
- JavaScript:
– undefined
– null
– ブール値の false
– 数値のゼロ: 0
– 浮動小数点数のゼロ: 0.0
– NaN (Not a Number)
– 空の文字列: “”
JavaScriptでは、文字列に対して、””(空文字列)はFALSEと判定されることを知っています。パラメータの値が空文字列でない場合、TRUEと判定されます。したがって、”a”や”0″のいずれもTRUEとなります。
しかし、PHPの世界では少し異なります。FALSEと判定されるデータ値は以下の通りです:
- PHP:
– null
– ブール値のfalse
– 数値のゼロ: 0
– 浮動小数点のゼロ: 0.0
– 空の配列: []
– 空の文字列: “”
– 文字列”0″
文字列が空値でないのに、FALSEと判定されることに違和感を覚えたので、原因を調べてみました:
PHPは、ウェブリクエストでの使用を前提として設計されており、頻繁に文字列の入力(URLパラメータやブラウザのフォームからのPOSTリクエストなど)を扱います。そのため、PHPは文字列を他の型に自動的にキャストします。
これの簡単な例として、’1′ + ‘2’は3を返し、エラーや’12’などの他の解釈は行いません。同じロジックで、文字列’0’は数値0として使用することができます。
’0’は数値の0として使用できると言っていますが、数値の0は「空」です。PHPでは、「ゼロである」という特性を「文字列としての特性」よりも重視するため、’0’は「偽」と見なされます。
要するに、‘0’ == 0 == false もしくは (bool)’0′ === (bool)(int)’0′
(資料参考URL)
そのため、PHPで空文字列かどうかを判定したい場合には、次のような条件式を直接記述することが最善です。
- $string === “”と空文字列を比較する
- empty($string) というPHPの組み込み関数を使用して空値かどうかを判定する
- strlen( $string ) === 0 と文字列の長さが0かどうかをチェックする