Чес говоря (задумался об этом ещё до того как собаки в коде перестали тормозить, но было известно что это будет сделано) реально считаю что сейчас в РНР (в силу его природы) действительно переменную (текстовую) достаточно проверять только на длинну. Типа.
Код:
$username = strlen(@$username) ? $username: 'default';
Код:
$username = strlen(@$username) > 2 ? $username: die('short username');
или (использование die правда для примера, в реале по ситуации надо действовать)
с числами похожая ситуация, там проверять например на наличие только чисел (и знака минуса если отрицательные допустимы, итд, как именно и на что проверять это уже детали)
РНР это собственно не ассемблер где переменная указывает на неопределённое место памяти где непонятно что хранится, она либо имеет нужные данные (массивы, числа, строки, бульки, итд) либо не имеет. С точки зрения отладки куча проверок на всякие пустые или не пустые, только усложняется дебаг. (Хотя многие думают что наоборот чем подробнее проверки тем проще дебаг.)
Если у вас в скрипте есть разница между тем не пришла переменная, пришла пустая, или в ней не то что нужно, это какой-то некрасивый подход к самому проектированию. Мы либо получаем конкретные и главное корректные данные, либо не получаем.
- Неверные данные пришли ? (будь то попытка инъекции, или неверное действие честного пользователя)
- Пришло не то что ждали ? Юзаем дефолт. Если переменная не подразумевает дефолта (как в случае например с открытием страницы под номером "1' or 1=1") закрываем скрипт, клиенту даём 404. Никаких "сюси-муси"