class Search
{
private $search_string = null;
public function __construct()
{
$this->db = Database::getInstance();
// prepare search string
$this->search_string = (isset($_GET['search']) && !empty($_GET['search']))? $_GET['search'] : null;
if ($this->search_string === null) {
throw new Exception(SEARCH_STRING_EMPTY, 99);
}
...
}
}
try {
$search = new Search();
}
catch (Exception $e) {
echo $e->getMessage();
...
}
Передаю пустую строку, выкидываю ексепшен, выводится ошибка php Exception: in ... (на подобии ошибки PHP_NOTICE и.т.д.), дальше его ловит мой блок catch. Как от этого избавится?
На версии PHP 5.2 этого нету, а на php 5.4 есть...
Пользуюсь OpenServer-ом. error_reporting(0); прописан...
UPD: скрин проблемы
Ответ
TL;DR: за это отвечает настройка xdebug.show_exception_trace, достаточно просто отключить ее. По расцветке также можно угадать, что это вывод xdebug, и в случае аналогичных непонятных происшествий начинать копать оттуда.
Сама по себе эта штука входит в пакет забавного функицонала xdebug (как минимум, есть еще xdebug.sсream, подавляющий оператор @), отвечающего за поиск архитектурных ошибок. Конкретно эта настройка позволяет найти все подавленные исключения и покарать тех, кто их проглатывает без обработки (идеальная программа должна работать без исключений вообще), но в продакшене и тестинге эта опция, конечно, должна быть отключена.
Комментариев нет:
Отправить комментарий