Вариант 3. Используйте исключения и поместите проверку идентификатора как можно ближе к данным.
public function getArtData($id) {
if (!is_int($id) || $id <= 0) {
throw new InvalidIdentifierException(
"Article ID $id must be a valid, positive integer.");
}
...
}
Проблема с возвратом false
заключается в том, что вы должны проверить возвращаемое значение для обработки и пропустить его. Если там, где вы обрабатываете (уровень представления) несколько удаленных вызовов функций, из которых он проверен (уровень данных), вы должны проверить false
на каждом уровне. Исключение будет распространяться вплоть до первой функции, которая его перехватит, минуя оставшийся код в каждой функции.
function displayProductAction(...) {
$prodID = $request->getParam('prod');
$form = ...
try {
$form->fill_data($prodID)
$view->form = $form;
}
catch (InvalidIdentifierException $e) {
$view->error = $e->getMessage();
}
$view->render();
}
Вызов die()
вызывает свои трудности. Это сложнее для модульного тестирования, и это заставляет вас помещать код ошибки в точку отказа. Что происходит, когда вы хотите использовать свой код из веб-службы?