Интерблог

Архив за Апрель 2012-го

Принцип неопределённости в РНР
Автор: Ognezmej. Опубликовано: 03 Апреля 2012

Продолжаем публикации на тему принципа неопределённости - гибкость языка программирования, и чем это чревато.

Рассмотрим поведение переменных, передаваемых через $_GET. Общие места - наличие переменных рекомендуется проверять if (isset($_GET['var'])), конструкции вида <a href="script.php?page=&addr=&blabla=">ткни сюда</a> тоже, в общем, не вызывают особых вопросов - пустые переменные. А теперь проверьте эти переменные рекомендуемым способом - получите ЕКГУ, что в простонародье означает TRUE. А теперь не рекомендуемым - if ($_GET['var']) - получите нормальное FALSE!

Ну, и, конечно, попытки проанализировать ноль. Для нас-то ноль - это целое число, на которое нельзя делить, а для PHP это, кроме целого числа, ещё и строка '0', ещё и логическое FALSE, ещё и пустая строка (''). Ну, вот, к примеру, передаём тем же $_GET некую переменную ?var=0, и анализируем. if($_GET['var']) даёт FALSE, хотя этот ноль для нас может нести информацию. Или, к примеру, пишем функцию с необязательными параметрами. При передаче необязательным параметром нуля и его проверке тоже получаем FALSE. К счастью, такие моменты легко решаются строгой проверкой if($arg!==FALSE). Это просто нужно помнить, чтобы потом не было мучительно больно за неправильно работающий код.

В теории всё хорошо, переходим к практике.

Опаньки!

Строгая проверка if($_GET['var']!==FALSE) при анализе запроса ?var1=&var2= даёт TRUE! А вы думали, в сказку попали?

Итак, формулируем задачу: к нам прилетает запрос вида: ?var1=1&var2=0&var3=. Нужно его проанализировать и отличить заданную переменную от нуля и пустой переменной. Причём, первое от второго отличать необязательно, а вот от третьего - надо. Фокус номер один - все переменные из $_GET - запроса имеют строковый формат, и, если кто захочет проанализировать gettype($_GET['var']), его ждёт разочарование. Но слабость обращаем в силу - раз все переменные - строки, то строгая проверка if($_GET['var2']==='0') (обратите внимание на кавычки) должна дать TRUE. И точно. Таким образом, ноль мы выцепили. Что с ним делать - решаем сами. Остальные переменные проверяем нестрогим if ($_GET['var']).

 

Метки: PHP, Кодинг

Популярные записи

Принцип неопределённости в РНР

Принцип неопределённости в MYSQL

Недолёт

А ещё AJAX нужен для...

Принцип неопределённости в PHP - праздник продолжается!

Эмуляция плавности в ActionScript.

Программная анимация в ActionScript

Анимация при наведении в ActionScript

Использование кодировки UTF-8

Буквицца

Архив записей  

2019

Янв  

2018

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2017

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2016

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2015

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2014

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2013

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2012

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2011

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2010

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2009

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек