PHP ctype_digitの変な挙動



http://jp.php.net/ctype_digit

整数の判別をするのに使われるであろう関数 ctype_digit()
エラーが起きたり起きなかったりする現象に遭遇

この関数を活用するには string を渡さなければなりません。 たとえば integer を渡すと常に FALSE を返します。


ということだったので、問題の箇所をトレースしてみたらintegerで渡っていることが判明
さくっと文字列で渡すことで解決…
しかし、trueを返すこともあったので気になって以下のようなスクリプトで確認すると

php 5.2.13

for ($i=-10; $i<=1000 ; $i++) {
    var_dump($i);
    var_dump(ctype_digit($i));
}

256上はtrueになる。ググッたところ 256以上は自動で文字列キャストするらしい
が、48~57もtrueになる… なんだか気持ち悪い結果になってしまったが
型がゆるいPHPならではな感じもしなくもない

関連記事:

  1. PHPの日付の比較って文字列のままできるんだね…

Comments are closed.