ну смотри.
Если вдуматься - какой смысл в конструкции вида
PHP:
if (empty($subpage)) $subpage="1";
?
Зачем ее написали?
А чтобы нотайса "андефайнед вариабле" не было!
Но какой смысл в этом нотайсе?
Не кажется тебе это немного странным?
Зачем было вводить эти нотайсы чтобы тут же их давить?
Довольно дурацкая затея, если вдуматься?
На самом деле, все было совсем не так.
Естественно, нотайсы придумали не для этих проверок, а для предупреждения о том, что ты собираешься использовать переменную, которой нет!
Именно от такого использования и идут все беды - взломы скриптов, и проблемы с регистер глобалс, и ошибки в программах.
Если вдуматься - и правда - как можно писать программу, НЕ ЗНАЯ, что у тебя в переменной? Ну это как дом строить - не из четкого количества кирпичей, цемента, досок - а от балды, что будет - то будет.
Во всех "серьезных" языках программирования ты должен переменную перед использованием объявить, сказать программе, что вот у тебя переменная, и она имеет такое-то значение.
В РНР раньше было не так, но со временем авторы языка осознали, сколько этоприносит бед.
И стали подталкивать программистов к тому, чтобы все переменные, которые будут нужны в скрипте, заранее декларировались.
О попытках использовать переменную, которой нет, и предупреждает тебя нотайс.
То есть, надеюсь, я был убедителен - надо все переменные в скрипте объявлять.
И, в общем, с этим особых проблем нет.
Нужен тебе счетчик $i? Вместо просто
echo $i++;
ты пишешь
$i=0;
echo $i++;
Все ок - заранее объявил, никаких неожиданностей не будет.
$i равна нулю, а не 1526 после предыдущего цикла.
Переходим к твоей субпейдж. Она ведь приходит с запросом?
И может придти, а может - нет. так? Как с ней-то быть?
как заранее объявить переменную, какое значение присвоить?
самое простое - это
if ($subpage=="") $subpage="1";
можно сделать и так.
Но уже понимая, что делаешь ты это не для того, чтобы рот РНР заткнуть, а чтобы быть уверенным, что переменная есть.
Для этих целей неплохо бы все входящие переменные таким образом объявить в начале скрипта.
Не непосредственно перед использованием, а в начале скрипта, до любых действий.
Так с ними можно будет проще управляться - следить, добавлять. Так ты будешь уверен, что объявил переменную точно до любого использовния.
Однако, переменных может быть много. И такая конструкция может растянуться далеко. Нельзя ли автоматизировать процесс? Можно! Надо написать функцию, которая получает как аргумент массив с именами переменных, и инициализирует их.
Заодно мы на эту функцию возложим еще одну важную функцию! А имено:
Допустим, subpage в скрипт пришла... но в ней не 1, а "Здесь был Вася"! Твоя проверка на иссет или емпти оставит переменную как есть, и она пойдет в запрос... в результате получим ошибку.
Значит, надо заранее прописать всем переменным их тип, а в функции насильственно привести к нему.
Еще две вещи, которые может делать наша функция:
- присвоить определенное значение ,если переменная не определена.
- проверить на диапазон допустимых значений.
К примеру, передали тебе subpage=-1. проверка на тип прошла, а ошибка все равно есть - нету страницы с таким номером.
Вот.
Пока читай и усваивай, что непонятно - спрашивай, а я пока напишу функцию.
Если мытры захотят попингать этот рассказиек - буду зарание благодарин.