◆ 使えない(構文エラーとかじゃなく実用性的に

前に JavaScript だと ~~ で NaN 無しで数値キャストできて便利と書いたので 今回は PHP でもやってみます
http://var.blog.jp/archives/45714527.html

まずは数値
>>> ~~1
=> 1
>>> ~~10
=> 10
>>> ~~3.9
=> 3
>>> ~~-9.9
=> -9

ちゃんと int キャストされてます
PHP だとキャストは (int)1.23 でもできるので少し楽になる程度です


次に文字列
>>> ~~"abcd"
=> "abcd"

え? そのまま??
~ が1つだとどうなってるのか気になるので1つにしてみます
>>> ~"abcd"
=> b"ツ楪敖慊・
なんか文字化けしてる
本当にそのまま bit 反転して それを文字列として表示させてるようですね


なら 残りの型は?
>>> ~~true
Fatal error: Unsupported operand types
>>> ~~[]
Fatal error: Unsupported operand types
>>> ~~null
Fatal error: Unsupported operand types
>>> $a = new StdClass;
>>> ~~$a
Fatal error: Unsupported operand types

全部エラーです
つかえねー。

PHP って弱い動的型付けというわりに なんでも強制変換してくれずに エラーになるのが微妙なところです
↓のエラーはよくみるんじゃないでしょうか
>>> (string)[1,2]
PHP error: Array to string conversion on line 1
>>> (string)new StdClass()
PHP error: Object of class stdClass could not be converted to string on line 1

さすがはPHP安定の使いづらさを提供してくれます
ということで ~~は PHPでは数値型にだけつかいましょう
というか (int) のほうがみやすいですし無いものと思っていいと思います