PHP intval()行为?

Pol*_*ino 2 php string integer casting

这听起来很奇怪:

$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!!!
Run Code Online (Sandbox Code Playgroud)

所以用stringto int转换intval返回0.精细,但它返回0也当字符串实际上可以被铸造到零(因为零),从而有效.

如何区分两者(允许'0'作为字符串和拒绝'字符串')?

编辑:好吧,让我说我知道我可以使用is_numeric.But is_numeric('2.3')返回true,所以它无能为力.和:

$test = '0';
var_dump(is_numeric($test) && intval($test)); // Fail!!!
Run Code Online (Sandbox Code Playgroud)

Nik*_*kiC 8

你可以ctype_digit在演出之前做一个检查(如果你只想要正数).或者,您可以使用filter_var和进行整数验证FILTER_VALIDATE_INT.整数验证还将检查整数语义,即它将确保整数在允许的范围内.您还可以通过多种选项根据需要对其进行自定义.