はじめに
bool値の文字列変換について知らず、学んだことがあったため自分なりにまとめます。
公式ドキュメント
公式ドキュメントを確認すると以下の様に記載されていた。
文字列への変換
(string) キャストや strval() 関数を使って変数を文字列へ変換することができます。 文字列型を必要とする式のスコープにおいて、文字列への変換は自動的に行われます。 echo や print 関数を使うとき、 あるいは可変変数を文字列を比較するときにこの自動変換が行われます。 マニュアルの型 と 型の相互変換 の項を読むとわかりやすいでしょう。 settype()も参照してください。
bool の true は文字列の "1" に、 false は "" (空文字列) に変換されます。 これにより boolean と文字列の値を相互に変換することができます。
らしいです。
今回私のケースとしてはjson形式の文字列にtrueをセットした変数を文字列連結した際に起こりました。
おそらく文字列連結することで、文字列へ変換され1
になってしまったと思われます。
実際に確認してみると、確かにドキュメントで書かれている様にtrueは1に、falseは空文字列に変換されていました。falseは0ではなく、空文字列なのですね。
$bool = true;
$text = "boolの値:" . $bool . "です";
echo $text; //boolの値:1です
$bool = false;
$text = "boolの値:" . $bool . "です";
echo $text; //boolの値:です
ちなみに上記例でtrueをそのまま出力したい場合はシングルクォートで囲うことで対応できました。
$bool = 'true';
$text = "boolの値:" . $bool . "です";
echo $text; //boolの値:trueです
$bool = 'false';
$text = "boolの値:" . $bool . "です";
echo $text; //boolの値:falseです
ダブルクォートとシングルクォートの違いについて
ダブルクォートとシングルクォートの違いについても改めて確認してみる
シングルクォート:囲った文字列はそのまま
ダブルクォート:囲った文字列の変数展開したり、エスケープシーケンスを特殊な文字として解釈する
//変数展開の例
$string = "hoge";
var_dump("$string"); //string(4) "hoge"
var_dump('$string'); //string(7) "$string"
//エスケープシーケンス例
var_dump("\r\nおはよう\r\nいい天気だね!");
[出力結果]
string(37) "
おはよう
いい天気だね!"
var_dump('\r\nおはよう\r\nいい天気だね!');
[出力結果]
string(41) "\r\nおはよう\r\nいい天気だね!"
エスケープシーケンスとは?
エスケープ文字とは、文字列の中に機器の制御コードや通常は表記できない特殊な文字を混在させるために規定された、特殊な記号や記法の組み合わせのこと。
引用:エスケープ文字(エスケープシーケンス)とは - 意味をわかりやすく - IT用語辞典 e-Words
こういった違いがあることを知った上で使い分ければいいのかなと思いました。
まとめ
今回はbool値の文字列変換について調べつつ、シングルクォートとダブルクォートの違いについても軽く触れてみました。
公式ドキュメントを読むとそうだったのか色々知ることができるので、不明点が出たら都度確認してみたいと思います。
以上。