PHP intval() comportement?

Cela semble étrange pour moi:

$test_1 = 'string';
$test_2 = '0';

var_dump(intval($test_1)); //Output: int 0
var_dump(intval($test_2)); //Output: int 0

$can_cast = intval($test_2) ? 'sure' : 'nope'; //Wrong!!!

Donc avec un string à int conversion intval retourne 0. Très bien, mais il renvoie 0 aussi, quand la chaîne peut être coulé à zéro (car est zéro) donc valide.

Comment peut-on peut faire la distinction entre les deux (ce qui permet de " 0 " en tant que chaîne et refuser 'string')?

MODIFIER: ok permettez-moi de dire que je sais que je peux utiliser is_numeric. But is_numeric('2.3') retourne true, on ne peut pas l'aider. Et:

$test = '0';
var_dump(is_numeric($test) && intval($test)); //Fail!!!
is_numeric() pourrait être bon pour vous?
Qu'en est '0.0', '0.1' ou '0foo'?
j'ai édité la question, vous avez le point.
Qu'entendez-vous par "Fail!!!" pour le is_numeric exemple? C'est faux, comme prévu, à droite?
intval est une conversion, de ne pas vérifier, de sorte qu'il renvoie toujours un entier. Ainsi, il est impossible de savoir à partir de intval si l'argument est de type entier ou pas - c'est pas fait pour ça.

OriginalL'auteur Polmonino | 2011-12-18