Boolean型(真偽値)について
ほとんどのプログラミング言語には、Boolean型という変数の型があります。
Boolean型の変数の値は、true と false の2つの値しかありません。
これを日本語では真偽値と言います。true が 真 で、 false が 偽 になります。
主にif文で、true か false で評価されます。
if( true ){
echo 'if文は true だとブロック内の命令(プログラム)が実行される';
}
// 1 と 1 が同じだったら、trueと評価される
if( 1 == 1 ){
echo '1 == 1 は、trueなので、このブロックが実行される';
}
暗黙の型変換
PHPでは暗黙的に型が変換されて実行されます。
Boolaen型ではない、Integer型(数値型)や、String型(文字列型)も、if文などでは自動的にtrue や false に変換されます。
具体的には、1 や '1' は、true になります。
逆に、0 や '0' は false になります。
変わったところでは、[] は false で、 [0] は true になります。
以下にサンプルコードをアップしますので、自分で試してみて下さい。
$result = [];
foreach( [true, false, null, 1, 0, -0, -1, 0.1, '1', '0', '-0', [], [0]] as $v ){
if( $v ){
$result['true'][] = $v;
}else{
$result['false'][] = $v;
}
}
var_dump($result);
[0] が true になるのは、配列の中の値ではなく、配列に要素がいくつ存在するかで評価されています。count([0])は、1になるということです。
暗黙の型変換の結果は言語依存です
プログラミング言語は、数学や物理のような、永遠不変の万物の法則ではありません。
プログラミング言語の作者が、自分の好みや思想やノリで実装しているので、不合理的と感じる面が多々あります。
例えばJavaScriptでは、'0' は、true になります。[1]
console.log( '0' ? true: false )
これはおそらく、文字列の長さが評価され、1文字あるので true と評価されたのでしょう。
PHPは、文字列の'0'は、数値の0と同一という解釈で、数値の0は false と評価されています。
PHPが数字の0をfalseにする理由
ブラウザーなどから、フォームなどを使って送信した値は、全て文字列としてサーバーに送信されます。
数値の0をサーバーに送信しても、サーバー側では数字の'0'として受信します。
その結果、数字の'0'は、数値の0として解釈する必要があります。
-
シェルスクリプトなどは、処理の正常終了は
0を返すことになっています。 ↩︎
Discussion