2009/06/17

パーマリンク 23:56:56, 著者: Charlie

PHPではa==b, b==cでもc!=aなことがある

PHPの比較の素晴らしさ加減は正常 @ はてな匿名ダイアリー
  • PHPの「==」は数値比較なので、文字列は数値に変換されてから比較される。
  • PHPの「文字列→数値」の暗黙の変換は、文字列が0xで始まると、intval($str, 16)、つまり16進数として変換してくれる。
  • intval($str, 16)は、文字列の途中で変換できなくても文句を言わず、部分文字列を数値に変換する。なので、"0xax" == 10。
  • ただし、0で始まる文字列を8進数として変換してはくれない。

1と2は仕様と言われれば個人的には受け入れられる。
3あたりからチト厳しい。せめてlintで警告が欲しい。「===」と書いたつもりが「==」だった、というケアレスミス対策に。
4は対称性が崩れる分、覚える事が増えて面倒だ。暗黙の型変換がこういう仕様だというなら、それを明示的にやる関数 / 演算子があった方がよいと思う(既にあるのなら、教えてくださいPHPのえろい人)。

ちなみに、追加で確認してみたら

"hoge" == true かつ "hoge" == 0 かつ true != 0

だったので、「==」は数値比較演算子というよりも、自動的に型変換する演算子(かつ、CやJavaとは型変換の規則が異なる)として覚えた方が正確なのではないか。

追記

http://anond.hatelabo.jp/20090617164618のコード、

if (strcmp("0x0A", "10") == 0) {

でないと、チュッされちゃうのでは……。 strcmpは等しい時に0を返すので。

パーマリンク 11:20:51, 著者: Charlie

How to write Japanese precisely (正確な文章の書き方)
パーマリンク 10:23:25, 著者: Charlie

2009/06/16

パーマリンク 11:29:20, 著者: Charlie

40+ Helpful Resources On User Interface Design Patterns @ Developer's Toolbox | Smashing Magazine

英文。ユーザインタフェースのデザインパターンに役立つ資料40(とちょっと)

2009/06/14

<< 1 ... 48 49 50 51 52 53 54 55 56 57 58 ... 105 >>

5月 2024
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

リンクブログ

最近の記事

検索

XMLフィード

powered by b2evolution