🚀
PHP true/false , ==/==== で混乱した件
はじめに
今回、phpのbool型、true/falseで若干戸惑ったため、こちらに記載していきます。
自分の心の声をそのまま記載します。
思考スタート
まず、下記変数trueの中身は何でしょうか。
$true = "true";
echo $true;
// 出力結果
// true
そりゃそうですよね。文字列のtrueはtrueとして出力されます。
下記変数の中身は何でしょうか。
$true = true;
echo $true;
// 出力結果
// 1
trueはboolean型なので、trueの場合、1に変換されます。
ということはif文で書くと
$true = true;
if ($true === 1){
echo $true;
}
// 出力結果
//
あれ、出力されない。(ここから自問自答)
そうか、「===」はデータ型も含めた完全一致を指すため、
$trueはboolean型、1はinteger型となり、一致しない、と判断されるのか。
では、両方boolean型に合わせれば、
$true = true;
if ($true === true){
echo $true;
}
// 出力結果
// 1
出力された。
では、完全一致ではなく、 「==」の比較演算子を使った場合、
$true = true;
if ($true == 1){
echo $true;
}
// 出力結果
// 1
出力された。
データ型は判断されず、1と1は等しい、と出る。
数値をboolean型に変えてif文使ってみる。
$true = 1;
if ((bool)$true === true){
echo $true;
}
// 出力結果
// 1
(bool)でキャストする(というみたい)ことで、数値の1をboolean型の1に変更できる。
ではfalseは、1ではなく、0というboolean型になるわけか。(間違い)
$false = false;
echo $false;
// 出力結果
//
はい、間違でした。falseの場合何も表示されません。
ただ、型を調べてみると
$false = false;
echo gettype($false);
// 出力結果
// boolean
boolean型ですよと出力される。何も入っていないわけではないのか。
ということは、falseでif文を記載してみると、
$false = false;
if ($false === false){
echo "falseの分岐成功";
}
// 出力結果
// falseの分岐成功
しっかり分岐できました。
さいごに
- boolean型のtrueは1と出力される。
- boolean型のfalseは何も出力されない。(boolean型ではないので、何もないということではない)
- == は比較演算子 左右の値が合っているか判定する。データ型は判定しない
- === は完全一致を判定する。データ型も判定する。
上記4点の整理ができていれば迷うことはなかったです。
日々精進してまいります。
Discussion
表題、「=」は4つではなく3つなのでは?