😐

Boolean型(真偽値)について

2022/05/01に公開

ほとんどのプログラミング言語には、Boolean型という変数の型があります。
Boolean型の変数の値は、truefalse の2つの値しかありません。
これを日本語では真偽値と言います。true で、 false になります。

主にif文で、truefalse で評価されます。

if( true ){
  echo 'if文は true だとブロック内の命令(プログラム)が実行される';
}

//  1 と 1 が同じだったら、trueと評価される
if( 1 == 1 ){
  echo '1 == 1 は、trueなので、このブロックが実行される';
}

暗黙の型変換

PHPでは暗黙的に型が変換されて実行されます。
Boolaen型ではない、Integer型(数値型)や、String型(文字列型)も、if文などでは自動的にtruefalse に変換されます。

具体的には、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と同一という解釈で、数値の0false と評価されています。

PHPが数字の0をfalseにする理由

ブラウザーなどから、フォームなどを使って送信した値は、全て文字列としてサーバーに送信されます。
数値の0をサーバーに送信しても、サーバー側では数字の'0'として受信します。
その結果、数字の'0'は、数値の0として解釈する必要があります。

脚注
  1. シェルスクリプトなどは、処理の正常終了は0を返すことになっています。 ↩︎

Discussion