Оформить вывод ошибок

1-ый способ: set_error_handler()

Оформить вывод ошибок можно через функцию set_error_handler().

function errorHandler($errno, $errstr, $errfile, $errline) {

  // Код ошибки не включён в error_reporting
  if (!(error_reporting() & $errno)) {
    return false;
  }

  // может потребоваться экранирование
  $errstr = htmlspecialchars($errstr);

  switch ($errno) {
    case E_USER_ERROR:
      echo "<b>Пользовательская ОШИБКА</b> [$errno] $errstr<br />\n";
      echo "  Фатальная ошибка в строке $errline файла $errfile";
      exit(1);

    case E_USER_WARNING:
      echo "<b>Пользовательское ПРЕДУПРЕЖДЕНИЕ</b> [$errno] $errstr<br />\n";
      break;

    case E_USER_NOTICE:
      echo "<b>Пользовательское УВЕДОМЛЕНИЕ</b> [$errno] $errstr<br />\n";
      break;

    default:
      echo "Неизвестная ошибка: [$errno] $errstr<br />\n";
      break;
  }

  return true;
}

// Задать пользовательский вывод ошибок
set_error_handler('errorHandler');

Если вывести несуществующую переменную, то код выведет примерно следующую строку:

Неизвестная ошибка: [2] Undefined variable $notExists

Чтобы вернуть обработчик ошибок по умолчанию, надо вызвать функцию restore_error_handler().

Функцию set_error_handler() желательно вызывать в начале файла. Если будет ошибка до вызова set_error_handler(), то кастомная обработка ошибок не сработает.

2-ой способ: register_shutdown_function()

Функция set_error_handler() не поддерживает несколько типов ошибок, например Fatal error или исключения. Чтобы выводить дополнительную информацию об ошибке, можно использовать функцию register_shutdown_function().

register_shutdown_function(function () {
    $err = error_get_last();
    if (!is_null($err)) {
        print 'Ошибка#'.$err['message'].'<br>';
        print 'Строка#'.$err['line'].'<br>';
        print 'Файл#'.$err['file'].'<br>';
    }
});