Правила вызова функции - типы входных параметров и проверка

diamond_krnl

pure-php
Правила вызова функции - типы входных параметров и проверка

При написании функции всегда задаюсь вопросом кто прав - прототип функции или лень программиста:

1. Прототип функции
PHP:
function foo($name, $config = array())
{
  if (!is_string($name) || $name=="") 
  {
    throw new Exception('name must be specified in a string');
  }
   if (!is_array($config)) 
   {
     throw new Exception('Configuration must be an array');
   }
}
то есть в любых неправельных ситуациях бьем по рукам, это воспитывает, но все программисты ленивы :) и так хочется не заморачиваться, а просто написать:
PHP:
foo($name, null);
2. Лень программиста
PHP:
function foo($name, $config = array())
{
   $name = strval($name);
   settype($config, "array");
}
дубовая защита да и кода меньше

Каким подходом вы пользуетесь и почему? Или проверки или приведения к типу не используете вовсе?
Спасибо
 

diamond_krnl

pure-php
Гравицапа
это урезаный пример, параметров бывает и больше - до 5, с 2-3 не обязательными.

перефразирую вопрос:
что для вас лучше: насильный кастинг или строгая типизация?
 

Андрейка

Senior pomidor developer
diamond_krnl
я те вопрос по делу задал..
или у тя склероз и не помнишь какие параметры в функцию пихать? так есть phpdoc
 
diamond_krnl
Приятно, да, когда так помогли сразу, подсказали ... приняли активное участие...
Андрейка,
Вот неужели с ростом проффесионализма, уменьшается желание помочь человеку, подсказать что либо.
Я лично стараюсь, воздерживаться от таких комментариев, по крайней мере пока мой статус здесь - новичёк, но т.к. ваши высказывания к пхп имеют совсем небольшое отношение...
Человек пришёл СОВЕТА спросить, по теории практически, а не "приведите пример, срочно !!!", а вы...
Стыдно товарищи, стыдно.
 

planarik

Новичок
PHP 5 и выше позволяет сделать следуешее при объявдении
PHP:
function bla((int) bla1, (array) bla2)
Если будет не так - сгенерируется ошибка.
 

planarik

Новичок
Извеняюсь Cишная привычка.

-~{}~ 10.07.07 14:04:

Дааа.. он таки образом только объеты проверяет. Извеняюсь. Не пользуюсь, просто не внимательно прочитал.
 
Сверху