неочевидное поведение filter

grigori

( ͡° ͜ʖ ͡°)
Команда форума
неочевидное поведение filter

var_dump(filter_var('01',FILTER_VALIDATE_INT)); //boolean false

т.е. filter_var(INPUT_GET,'a',FILTER_VALIDATE_INT);
вернет TRUE для ?a=1 и FALSE для ?a=01

Как вы считаете, это обосновано?

-~{}~ 25.04.10 22:54:

хехе ))
я попытался добавить коммент в мануале на php.net
мне написали
Your IP is listed in one of the spammers lists we use, which aren't controlled by us. More information is available at http://www.dnsbl.info/lookup.asp?IP=91.124.213.87
но ссылка не работает...
типа, отвали со своими комментами :)
 

fixxxer

К.О.
Партнер клуба
Там есть флаг FILTER_FLAG_ALLOW_OCTAL. Так что вполне логично, что без него такое значение не допускается, иначе как отличить, что имеется в виду под, скажем, 0777? А коренным образом менять поведение в зависимости от флага было бы совсем нехорошо.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
понял, спасибо

я как-то ожидал обычного PHP-шного приведения
никто ж не удивляется, что (int)'0111' === 111 ?
а тут у нас внезапно строгая типизация скаляров появилась, и никаких "it's not a PHP way"!

перепишу на FILTER_SANITIZE_NUMBER_INT
 

fixxxer

К.О.
Партнер клуба
Ну, отсутствие консистентности это тоже php-way, гы-гы.
 

AmdY

Пью пиво
Команда форума
мне кажется что php катится к частичной типизации. вопрос с приведением типов при валидации довольно интересен. Мы как-то с коллегой обсуждали возможность полноценного тайп хинтинга, но застопорились как раз на том в реквесте всё будет как строка, поди сделай верно function(String $a, Integer $b) :(, а так мечтается удобный exceptition заполучить.
 

fixxxer

К.О.
Партнер клуба
это вполне можно сделать как "возможность кастинга к"

function( (string) $a, (integer) $b)

даже патч такой был где-то

ну и Spl-типы же есть уже давно - но оно явно мало кому надо =)
 

AmdY

Пью пиво
Команда форума
патч был, даже два варианта встречал, но всё это бесполезно, пока не будет порядка с приведением. а то даже __toString имеет свои фокусы.
 

fixxxer

К.О.
Партнер клуба
не, ну это же все понятно откуда растет.

от register globals и того факта, что в http-запросе все - строки. хотели как лучше ведь =)

ваще что-либо в этом плане менять в php давно поздно. так, костылики очередные навешивать.
 

AmdY

Пью пиво
Команда форума
где здесь с костылями успеешь, если появляются новые костыли на которые нужны свои костыли вешать, все эти нэймспэйсы и замыкания заменили бы наведением порядка в том, чтобы было.

хотя, судить легко, это не самому писать.

-~{}~ 26.04.10 02:09:

spl typeы в pecl, я типизацией давно интересовался и на патч и на types здесь же ссылки оставлял, авось народ подхватит
 

fixxxer

К.О.
Партнер клуба
да на самом деле действительно пофигу. :)

писать в зависимости от потребностей, либо

$id = (int) $id

либо, скажем, что-то вроде

Assert::isInteger($id)

совершенно не сложно =)

ну это я про аргументы методов. а если речь идет скажем о формах, дык тут давно валидаторы-фильтры во всех фреймворках
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Автор оригинала: fixxxer
ну и Spl-типы же есть уже давно - но оно явно мало кому надо =)
Если б тот же filter умел возвращать SPL-типы, вполне можно было бы их использовать.
 
Сверху