LoginSignup
4
1

More than 3 years have passed since last update.

PHPのBoolean型で利用する、true, falseという単語は「定数」

Last updated at Posted at 2020-08-01

TRUE, FALSEとはなんなのか

Boolean型の変数において格納する true, false というキーワード。
TRUE, True, true のように様々に書くことができます。私は true, false 派です。
馴染み深いものですが、よくよく考えるとこれは何なんでしょうか。

boolean リテラルを指定するには、定数 TRUE または FALSE を指定してください。 両方とも大文字小文字に依存しません。
https://www.php.net/manual/ja/language.types.boolean.php

というわけで、定数でした。

大文字小文字を気にせず使えるのは、定数だから

true, false は大文字小文字を気にせず使えます。

$flag = TRUE;
$flag = True;
$flag = true;

これは、define() で定義された定数についてPHPが大文字小文字を区別しないことから、このような挙動になっていると推測されます。
参考:Q. PHPは大文字小文字を区別するか?#定数

定義を確認する

ドキュメントに記載があります。

TRUE (boolean)
Booleans も参照ください。
FALSE (boolean)
Booleans も参照ください。
https://www.php.net/manual/ja/reserved.constants.php

「定義済みの定数」としてドキュメントに記載されていることが確認できました。

実際に、get_defined_constants()という関数で確認してみます。

$ php -r 'var_dump(get_defined_constants());'
  ... (省略) ...

  'TRUE' =>
  bool(true)
  'FALSE' =>
  bool(false)

  ... (省略) ...

定義されてるのが確認できました!!

true, falseは真偽値そのもの (Booleanリテラル) ではない

というわけで、

TRUE, True, true 定数
FALSE, False, false 定数
bool(true) 真偽値 (Booleanリテラル)
bool(false) 真偽値 (Booleanリテラル)

という感じになります。true, false の定数はあくまで定数であり、真偽値そのものではありません。

例えば、 $a = true; と定義したときの流れとしては、

  1. 定数trueが、bool(true) に展開される
  2. $aに、bool(true) が格納される

と考えるとよさげです。

補足

NULLも同様でした。同様の方法で確認できます。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1