曖昧な片付けで悩まされるphp。
今回は表題のキャストで自分にとっての予期せぬ挙動を紹介します。
- string型の変数にコマンラインの引数やクエリパラメータで受けとった値の 'true', 'false' が格納されている。
- 予想
- $flg = 'true'の時
- (bool) $flgは真偽値trueとなる。
- $flg = 'false'の時
- (bool) $flgは真偽値falseとなる。
- $flg = 'true'の時
- 結果
-
/var/www/html # php -r 'echo (bool) "true" ? "真" : "偽", PHP_EOL;'
→真 -
php -r 'echo (bool) "false" ? "真" : "偽", PHP_EOL;'
→真
-
- 3の結果になるのはphpはざっくり
値があれば真、それ以外(0、null、空文字)と判定する からです。 - なので下記は偽となります。
php -r 'echo (bool) "" ? "真" : "偽", PHP_EOL;'php -r 'echo (bool) 0 ? "真" : "偽", PHP_EOL;'php -r 'echo (bool) null ? "真" : "偽", PHP_EOL;'php -r 'echo (bool) [] ? "真" : "偽", PHP_EOL;'