PHP intval () поведение? - PullRequest
       4

PHP intval () поведение?

2 голосов
/ 18 декабря 2011

Для меня это звучит странно:

$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!!!

Так что с string в int преобразование intval возвращает 0 .Хорошо, но он возвращает 0 также, когда строка действительно может быть приведена к нулю (потому что - это ноль), таким образом, действительна.разрешает '0' как строку и запрещает 'строку')?

РЕДАКТИРОВАТЬ : хорошо, позвольте мне сказать, что я знаю, что могу использовать is_numeric.But is_numeric('2.3') возвращает true, так что это не может помочь.И:

$test = '0';
var_dump(is_numeric($test) && intval($test)); // Fail!!!

1 Ответ

8 голосов
/ 18 декабря 2011

Вы можете сделать проверку ctype_digit перед тем, как разыграть (если вы хотите только положительные числа). В качестве альтернативы вы можете выполнить целочисленную проверку, используя filter_var и FILTER_VALIDATE_INT. Целочисленная проверка также проверит целочисленную семантику, то есть обеспечит, что целое число находится в допустимом диапазоне. Вы также можете настроить его для своих нужд с помощью нескольких опций.

...