2009-11-28 3 views
1

Мы разрабатываем класс коллекции для специализированного PHP-приложения. В нем есть функции, называемые map, each и т. Д.Соответствующее использование исключений?

Обсуждается вопрос о вызове некоторых функций с плохим аргументом. Например:

public function each($fn) { 
    // ... 
} 

// ... 

$collection->each('not a function'); 

Если вызов each бросить исключение? Должен ли он вернуть null? Должны ли мы игнорировать плохой аргумент и позволить ошибке времени выполнения при попытке вызвать неэксентирующую функцию? Я не уверен, как мы должны справиться с этим делом.

+0

Duplicate: http://stackoverflow.com/questions/77127/when-to-throw-an-exception – LiraNuna

+1

@LiraNuna, это не дубликат. Этот вопрос касается проверки правильности ввода данных; это касается проверки входных данных кодера. – strager

+0

Они все те же. Вы ожидаете, что программист даст вам неправильный ввод на динамическом языке. – LiraNuna

ответ

3

исключения для исключительных ситуаций, неплохие кодеры.

Используйте утверждения вместо этого. См http://php.net/manual/en/function.assert.php

Если это для библиотеки для внешнего использования, то исключения на открытых методах могут иметь смысл, (например, InvalidArgumentException), но, в общем, утверждения являются более подходящими для проверки внутренне, что ваш код соответствует вашим требованиям.

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

Также см Design by contract using assertions or exceptions?

+0

, по-видимому, подразумевает использование исключений для отчетов о плохих параметрах, особенно в смысле метода интерфейса, где вызовы методов очень похожи на вход HTML-формы - вы всегда проверьте, не так ли? – Don

+0

плохой ввод формы html на самом деле не является исключительным, хотя ... это скорее ожидается. обрабатывать его с помощью 'if' и двигаться дальше. исключения не являются управлением потоком. –

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