ifのように()で囲めば暗黙のtrueとの比較でboolが得られると勘違いしていたので戒めとしてメモる。
($hoge > $huga)がboolになるのは、あくまで比較演算子での式がboolを返すから。
コードパターン
ifでできる書き方
if ($a == true) {}
if ($a) {} // trueとのゆるい比較で上と同義
簡略化できるパターン
if ($result == $hoge) {
$return = true;
} else {
$return = false:
}
return $result;
簡略化
return ($result == $hoge);
同様にはできない簡略化パターン
if ($result) {
$return = true;
} else {
$return = false:
}
return $result;
失敗パターン
return ($result); // $resultの値そのままが返る
// そもそもこれでは省略可能なreturnの()を省略していないだけでは?
var_dump(($result)); // これもboolにはならない
変換方法
boolへの変換(ワンライナー)
(bool) $result // キャスト (boolean)でも可
boolval($result) // 関数。5.5以上
($result == true) // 比較結果
!!$result // JSなどでたまに見る。反転時にboolになり、その反転で正しいbool値取得
$result ? true : false // 三項演算子(デバッグでboolのstring変換とかで似たものをよく使う)
($result && true) // 論理積。使い道なし…と思う(自動キャストされてる?)
他にもあるかな?
PHPに限りませんが、キャストと関数が用意されているとどちらを使えばいいかちょっと迷いますね。
参考記事
- PHP: 論理型 (boolean) - Manual
- PHP: 式 - Manual
- PHP: 型の相互変換 - Manual
- 【PHP入門講座】 型変換 - Qiita
- !!【追記あり】 - 汎用日記(仮)
今更調べたらif ($hoge)の資料ってあんまり出ないですね。
PHP逆引きレシピには書いてあったのですが…
while ($hoge)とかもよく使うんですが、値のみを式として評価ってどっからきてるんだ…?