タイトルの通りなのですが、ゆるふわの第一人者であるPHPではこういうのは勝手にいい感じにしてfalseで返してくれるもんだと思い込んでました。

1
2
$str = 'false';
(boolean)$str;

上記のコードの2行目でtrueが返ってくるというのは公式ドキュメントの下記に書いてあります。

論理型 (boolean)

じゃあどうすんねん


というわけでこんな感じのメソッドを作った。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class StringConverter
{
/**
* 文字列をbooleanに変換します
*
* @param string 変換する文字列
* @return boolean
*/
public static function toBoolean(string $str): boolean
{
$lowerString = mb_strtolower($str);
if (!in_array($lowerString, ['true', 'false'], true)) {
throw new \InvalidArgumentException('なんか適当なメッセージ');
}
return ($lowerString === 'true') ? true : false;
}
}

ちなみに5.6の場合はタイプヒンティングが効かないので引数と返り値の型は指定できません。まあ、PHP5.6なんでもうサポート切れますけど。

PHP触りだして結構経つのですが、いまだにこの辺りのごちゃごちゃが良く理解できておらず、毎回つまりますね。まあ、私はPHPerではなくてIT事務員おじさんなので…