var_dump("5.0" == "5");

zerkms

TDD infected
Команда форума
ты че, троллишь?
эм??
я просто подчеркнул, почему она так быстро (!!) работает, ДАЖЕ на мегабайтных строках.

по поводу вопроса: расскажи в каких случаях ты "везде" используешь проверку строк на is_numeric()
 

zerkms

TDD infected
Команда форума
и? это как-то расходится с моими словами?
а насчёт целесообразности ответ будет?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
>в каких случаях ты "везде" используешь проверку строк на is_numeric()

в методах, в которых идет составление запросов к базе
я всегда проверяю на is_numeric параметр перед вставкой его в запрос без обработки

PHP:
function getCompaniesAll($sortby, &$total_rows_count){
    if (!is_numeric($sortby['offset']) || !is_numeric($sortby['limit'])){
        throw new pException(612);
    }
offset вычисляется на основе пользовательского параметра

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

zerkms

TDD infected
Команда форума
я всегда проверяю на is_numeric параметр перед вставкой его в запрос без обработки
почему бы просто не привести к целому без всяких плясок?
(int)$offset
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
>и? это как-то расходится с моими словами?
она проверяет все символы и работает довольно быстро даже если буква последняя в мегабайтной строке

>а насчёт целесообразности ответ будет?
конечно, а почему спешка?

-~{}~ 15.11.09 16:50:

1. is_numeric - не "пляска", а нативное средство языка созданное специально для этой цели
2. (int)$offset выдаст Notice если в $offset array, resource или object

-~{}~ 15.11.09 16:53:

3. иногда мне нужны флоаты
4. иногда я работаю с денежными суммами - строками без перевода их в числа, чтобы не терять при конверсии во float
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
5. иногда я работаю с bigint из постгреса, который невозможно перевести в int
 

zerkms

TDD infected
Команда форума
grigori
5. иногда я работаю с bigint из постгреса, который невозможно перевести в int
если число пришло из постгре - смысл его проверять? :) или ты не веришь постгре? :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
я пишу проверку на is_int или is_numeric для всех параметров в методах, в которых составляется запрос,
источник данных меня при этом не интересует
работы немного (copy-paste 3 строки), а надежности добавляет очень даже
 

dimagolov

Новичок
кстати, про bigint & is_numeric
я пока остановился на такой реализации:
PHP:
function is_bigint($Value) {
	$Value= trim($Value, " \t\n\r");
	$trimmed= trim($Value, '+-0123456789');
	return (is_numeric($Value) && empty($trimmed));
}
осознаю, что разрядность я не проверяю, хотя можно было бы, но зато отсеиваем флоаты
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
dimagolov
я бы написал
if ($Value[0]==='-') $Value[0]='0';
return (($l=strlen($Value))<21 && strspn ($Value,'0123456789') === $l)

можно добавить проверку первого символа на +, но реально я этого не встречал еще

-~{}~ 16.11.09 03:29:

а вот так я получаю positive int32 из GET/POST

/**
* returns int on success, FALSE on the incorrect input and NULL if absent
*/
function filter_pos_int($var,$SCOPE=INPUT_POST){
return filter_input($SCOPE,$var,FILTER_VALIDATE_INT,array('options'=>array('min_range'=>1)));
}

$page = filter_pos_int('page',INPUT_GET);
 
Сверху