PHP true/false , ==/==== で混乱した件

7323 ワード

はじめに

今回、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点の整理ができていれば迷うことはなかったです。
日々精進してまいります。