Сейчас мои страницы выглядят примерно так:
if($_GET['something'] == 'somevalue')
{
$output .= 'somecode';
// make a DB query, fetch a row
//...
$row = $stmt->Fetch(PDO::ASSOC);
if($row != null)
{
$output .= 'morecode';
if(somethingIsOK())
{
$output .= 'yet more page output';
}
else
{
$error = 'something is most definitely not OK.';
}
}
else
{
$error = 'the row does not exist.';
}
}
else
{
$error = 'something is not a valid value';
}
if($error == '') // no error
{
//display $output on page
}
else // an error
{
// display whatever error occurred on the page
}
То, как я делаю все, работает, но это очень громоздко и утомительно для того, что, вероятно, очевидно: предположим, что я вызываю функцию где-то в середине моего кода или хочу проверить значение переменной или проверить запрос БД вернул действительный результат, и если он сбой, я хочу вывести ошибку? Я должен был бы сделать еще один if/else блок и переместить весь код внутри нового блока if. Это не похоже на умный способ делать вещи.
Я читал о try/catch и думал о том, чтобы поместить весь свой код внутри инструкции try, а затем пусть код запускается последовательно без каких-либо блоков if/else, и если что-то не удается просто выбросить исключение. Из того, что я прочитал, это остановит выполнение и заставит его перейти прямо к блоку catch (точно так же, как неудачный оператор if перейдет в блок else), где я мог бы вывести сообщение об ошибке. Но является ли это приемлемой или стандартной практикой?
Какой лучший способ обработки ошибок, фатальных или нет, в php-приложении, которое создает и выводит HTML-страницу? Я не хочу просто умирать с пустым экраном, так как это было бы очень неприхотливым для пользователя, но вместо этого нужно выводить сообщение в теле страницы, все еще позволяя показывать верхний и нижний колонтитулы.
Спасибо за ваш совет!