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;
と定義したときの流れとしては、
- 定数
true
が、bool(true)
に展開される -
$a
に、bool(true)
が格納される
と考えるとよさげです。
補足
NULLも同様でした。同様の方法で確認できます。