Можно ли умножить на одну переменную, чтобы проверить, действительно ли это число в php? - PullRequest
4 голосов
/ 06 февраля 2011

Я делаю это, чтобы проверить и уже использую переменную типа номер в php:

$myvar = $myvar * 1;

с этим, у меня есть число или, если $ myvar имеет какой-либо другой символ, результат равен 0

Интересно, может ли это как-то беспокоить меня в будущем.

для предотвращения саке, я использую функцию, которая поглощает вышеуказанный код, чтобы я мог изменить его при необходимости.Например:

$myvar = IntOrZero($myvar);

поэтому мой вопрос, если это хороший способ проверить и использовать числовую переменную?

РЕДАКТИРОВАТЬ:
Используя * 1, я уверен, что он вернет мне переменную типа номер.
См .:

$var = "350";
$num = 120;
// builtin
if (is_numeric($var))
  echo($var - $num);

// multiplying
$var *= 1;
echo($var - $num);

Хотя я не уверен, есливстроенный метод будет повторять то, что я хочу, я уверен, что умножение будет.
Мне все равно, является ли $ var число или нет, я не буду показывать пользователю сообщение, если это не так, Я буду работать со значением 0, если это не число.Исходя из ответов, это будет хороший способ?

function IntOrZero($var){
   return is_numeric($var) ? intval($var) : 0;
}

спасибо,
Джо

Ответы [ 3 ]

14 голосов
/ 06 февраля 2011

Нет, это не очень хороший способ, и вот почему:

$ php -r 'echo array() * 1;'
Fatal error: Unsupported operand types in Command line code on line 1

Чтобы убедиться, что переменная является числом, приведите ее :

$integer = (int)$integer;
$float = (float)$float;

К проверьте , является ли это число или нет:

is_numeric($var)    // number or string containing any valid numeric expression
ctype_digit($var)   // string containing only digits
is_int($var)        // is of type int
is_float($var)      // is of type float

Все они немного отличаются, в зависимости от того, что именно вы хотите проверить.См. Документацию:

http://php.net/is_numeric
http://php.net/manual/en/function.ctype-digit.php
http://php.net/is_int
http://php.net/is_float

3 голосов
/ 06 февраля 2011

что не так с is_int () \ is_numeric () \ ctype_digit () ??

2 голосов
/ 06 февраля 2011

Ммм, почему ты не делаешь правильную проверку?

Как:

Я настоятельно рекомендую вам использовать правильный способ проверки вашей стоимости.

...