2014-01-29 5 views
0

Я знаю, что название кажется загадочным, и, возможно, это так. Это почти дилемма. Я разрабатываю рамки для учебных целей (и, возможно, профессиональных), и тогда я намерен совместно разработать документацию, объясняющую все свойства и методы в проекте.Динамическая типизация и API "breaker"

В документации должно быть объяснено, что метод sum() должен принимать два целых аргумента. Например:

/** 
* Sum two numbers. 
* @param int $a 
* @param int $b 
* @return int 
*/ 
function sum($a, $b) { 
    return $a + $b; 
} 

Но вопрос, если случайно пользователь John Doe решили послать неправильный вид информации (независимо почему, может быть, потому что они не читают документацию), как я должен обрабатывающий ошибка? Должен ли я позволить PHP получить работу (которая в некоторых случаях может запускать код с совершенством, по совпадению), или выполнить ручную проверку и выбросить мою собственную ошибку, чтобы совпадение не могло произойти? Например:

function sum($a, $b) { 
    throwErrorIfNotMatchType($a, "int"); 
    throwErrorIfNotMatchType($b, "string"); 

    return $a + $b; 
} 

Короче говоря, ответственность за контроль ошибок и совпадениями должны управляться исключительно за счет API, или полную ответственность за пользователя (который должен прочитать существующую документацию), или должны контролироваться частично? В случае последнего ответа на какие случаи?

ответ

1

Тип проверки расходы CPU - это факт. Таким образом, вы должны выбрать свой яд

  • либо медленнее, но более типобезопасный
  • или быстрее, но менее типизированные

Некоторые API решили предложить как и пусть в потребитель выбрал яд, вот что я имею в виду:

/** 
* Sum two numbers, without checking types. 
* @param int $a 
* @param int $b 
* @return int 
*/ 
function sum($a, $b) { 
    return $a + $b; 
} 


/** 
* Sum two numbers, throw if checking types fails 
* @param int $a 
* @param int $b 
* @return int 
*/ 
function ts_sum($a, $b) { 
    throwErrorIfNotMatchType($a, "int"); 
    throwErrorIfNotMatchType($b, "int"); 
    return sum($a, $b); 
} 

Теперь проницательная часть, что это будет весьма устроиствами возможно, автоматически генерировать вторая версия из первой версии плюс комментарии к документу.

+0

Или, может быть, использовать константу 'DEBUG' для запуска * тип проверки *. –

+0

Проверка постоянных затрат DEBUG Время CPU - цель - быть как можно быстрее на быстром пути. По мере созревания приложения вы часто сможете уйти в отставку API-интерфейсов типов и работать с нестандартными в производстве. –

Смежные вопросы