php でも ~~ してみた
◆ 使えない(構文エラーとかじゃなく実用性的に
前に JavaScript だと ~~ で NaN 無しで数値キャストできて便利と書いたので 今回は PHP でもやってみます
http://var.blog.jp/archives/45714527.html
まずは数値
ちゃんと int キャストされてます
PHP だとキャストは (int)1.23 でもできるので少し楽になる程度です
次に文字列
え? そのまま??
~ が1つだとどうなってるのか気になるので1つにしてみます
本当にそのまま bit 反転して それを文字列として表示させてるようですね
なら 残りの型は?
全部エラーです
つかえねー。
PHP って弱い動的型付けというわりに なんでも強制変換してくれずに エラーになるのが微妙なところです
↓のエラーはよくみるんじゃないでしょうか
さすがはPHP安定の使いづらさを提供してくれます
ということで ~~は PHPでは数値型にだけつかいましょう
というか (int) のほうがみやすいですし無いものと思っていいと思います
http://var.blog.jp/archives/45714527.html
まずは数値
>>> ~~1
=> 1
>>> ~~10
=> 10
>>> ~~3.9
=> 3
>>> ~~-9.9
=> -9
=> 1
>>> ~~10
=> 10
>>> ~~3.9
=> 3
>>> ~~-9.9
=> -9
ちゃんと int キャストされてます
PHP だとキャストは (int)1.23 でもできるので少し楽になる程度です
次に文字列
>>> ~~"abcd"
=> "abcd"
=> "abcd"
え? そのまま??
~ が1つだとどうなってるのか気になるので1つにしてみます
>>> ~"abcd"
=> b"ツ楪敖慊・
なんか文字化けしてる=> b"ツ楪敖慊・
本当にそのまま bit 反転して それを文字列として表示させてるようですね
なら 残りの型は?
>>> ~~true
Fatal error: Unsupported operand types
Fatal error: Unsupported operand types
>>> ~~[]
Fatal error: Unsupported operand types
Fatal error: Unsupported operand types
>>> ~~null
Fatal error: Unsupported operand types
Fatal error: Unsupported operand types
>>> $a = new StdClass;
>>> ~~$a
Fatal error: Unsupported operand types
>>> ~~$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 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) のほうがみやすいですし無いものと思っていいと思います