数値のValidate

下記のような実装が多いけど、trueが与えられてtrueを返すのはあまり好きじゃない。

<?php
function isInt($value) {
    return !!preg_match('/^-?[0-9]+$/', $value);
}
var_dump(isInt(1));        #=> bool(true)
var_dump(isInt('1'));      #=> bool(true)
var_dump(isInt((float)1)); #=> bool(true)
var_dump(isInt(true));     #=> bool(true)

こうしたほうが良いと思うんだけど、何かやらない方が都合良かったりするのかな?

<?php
function isInt($value) {
    if(is_integer($value) || is_float($value) || is_string($value)) {
        return !!preg_match('/^-?[0-9]+$/', $value);
        #または return ctype_digit((string)$value);
    }
    return false;
}
var_dump(isInt(1));        #=> bool(true)
var_dump(isInt('1'));      #=> bool(true)
var_dump(isInt((float)1)); #=> bool(true)
var_dump(isInt(true));     #=> bool(false)