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
になります。
console.log( '0' ? true: false )
これはおそらく、文字列の長さが評価され、1文字あるので true
と評価されたのでしょう。
PHPでは、文字列の0が、数値の0に変換され、数値の0は false
と評価されています。
Author And Source
この問題について(Boolean型(真偽値)について), 我々は、より多くの情報をここで見つけました https://zenn.dev/phpbeginners/articles/4ddd51805d096e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol