Тотальная проверка данных, передаваемых в функцию

123 4
kiowas
На сайте с 06.02.2010
Offline
61
1327

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

Пишу проект на PHP. Есть много функций, много классов. В каждой функции проверяю параметры переданные в нее. Например в одном из методов класса проверяю параметры так:

function abc($client_id = null, $email = null) {

if(!$client_id || $client_id != intval($client_id))

return false;

if(!$email || !is_string($email))

return false;

}

Все бы хорошо, но проверки под час становятся громоздкими, тем более когда много параметров.

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

Пипец! Не могу ничего поделать с собой. В итоге, пока выполниться дохлый скриптик пройдет миллион проверок на вшивость.

Какую себе дать установку? Где проверять, где нет?

Помогите, пож-та. Уже третий день сижу пишу класс из 5 вшивых функций. Не могу определиться как сделать?!!! Хелп!

подпись
php.developer
На сайте с 22.11.2010
Offline
94
#1

Можно небольшой оффтоп?

$client_id != intval($client_id)

Что это?

kiowas
На сайте с 06.02.2010
Offline
61
#2

ну это будет означать что $client_id это число

Дописал:

if(!$client_id || $client_id != intval($client_id))

сработает, если $client_id ноль или не число

php.developer
На сайте с 22.11.2010
Offline
94
#3

Госпади, is_int(), ну и для справки is_numeric()

kiowas
На сайте с 06.02.2010
Offline
61
#4

Напиши, плиз, как бы ты сделал проверку, если ожидаешь получить целое положительное число большее нуля.

И какую проверку делаешь в реальных боевых условиях? Всегда ли проверяешь, или руководствуешься какими-то правилами, в зависимости от ситуации, и примеры если можно.

php.developer
На сайте с 22.11.2010
Offline
94
#5


function abc(int $client_id, $email = null) {
if($client_id<=0)
return false;
//...
}
kiowas
На сайте с 06.02.2010
Offline
61
#6

А если в функцию передается массив параметров, некоторые конкретные члены которого нужно проверить на целое положительное число?

php.developer
На сайте с 22.11.2010
Offline
94
#7

intval($arr['key'])>0

kiowas
На сайте с 06.02.2010
Offline
61
#8

Попробуйте тогда так

$a['key'] = array('4');

if(intval($a['key']) > 0)

print('ok');

Напишет, что ок, а не нужно.

В общем, вопрос не в этом... Когда проверять переменные в функции, на сколько подробно? Вот в чем вопрос ))

php.developer
На сайте с 22.11.2010
Offline
94
#9
kiowas:
Попробуйте тогда так
$a = array('4');
print(intval($a)); // Покажет 1

В общем, вопрос не в этом... Когда проверять переменные в функции, на сколько подробно? Вот в чем вопрос ))

Еще бы

$a = array('4');

print(intval($a[0]));

Проверять всегда. Особенно если данные идут от пользователя, максимально подробно. Но без перфекционизма.

kiowas
На сайте с 06.02.2010
Offline
61
#10

Я несколько запутался.

был вопрос, как проверить член массива, на предмет того, является ли он числом большим нуля и целым.

Ты написал

intval($arr['key'])>0

Но, если член массива сделать равным другому массиву, например array('4'), т.е. не числом в помине, а массивом, любым, то твоя проверка покажет единицу. Т.е. пройдет проверка. Но вопрос был, как проверить член массива на предмет того, является ли он числом целым, большим нуля.

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий