Обработка ошибок с помощью set_error_handler, trigger_error

fog

Рыцарь Джедай
Обработка ошибок с помощью set_error_handler, trigger_error

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

Как я обрабатываю ошибки:
Все действия, например добавление новостей, заключены в функции.
напр. news($title, $date, $text);
если всё отработало нормально - возвращаем true

В случае возникновения ошибки, например, пустая строка в $title, генерируется trigger_error уровня E_USER_NOTICE, которую в последствии обрабатывает функция, установленная с помощью set_error_handler.

В функции обработки ошибок, строка описания ошибки записывается в глобальную переменную, которая вызывается там где нужно вывести описание ошибки, или если ошибка уровня E_USER_ERROR - отправляется на e-mail

Всё отлично если ошибка генерируется так:

PHP:
if (!$text) 
	{
	trigger_error('Необходимо ввести текст новости');
	Return(0);
	}

За исключением того, что это происходит в несколько строк.
Хотелось бы генерировать ошибку и останавливать функцию в одну строку, может есть какие-то нюансы? Просто, как-то слишком длинно в каждом случае тягать return 0

Единственное что пришло в голову:

PHP:
if (!$text) return !trigger_error('Необходимо ввести текст новости');
trigger_error отрабатывает, возвращает true, и функция возвращает !true -- false
Корректно ли это?


Может кто-нибудь посоветует более правильный подход, или посоветует скрипт где можно посмотреть, как правильно использовать set_error_handler, trigger_error.
 

ForJest

- свежая кровь
А тебе не приходило в голову, что обработка ошибок нужна не для проверки входных данных, а для отслеживания правильности функционирования самого скрипта?
 

Alien

Новичок
+1 ForJest

У меня, например, если error_handler что-то ловит, то это однозначная рассылка логов, писем, и "прости-прощай мы упали" пользователю.
 

fog

Рыцарь Джедай
ForJest, если такая возможность есть, и это удобно, то почему этим не воспользоваться?
 

fog

Рыцарь Джедай
Alien, у меня
E_USER_ERROR - на мыло
E_USER_NOTICE - сообщение пользователю
 

Фанат

oncle terrible
Команда форума
Фог, из твоего сообщения не видно, что это УДОБНО.
Ты потому и написал, что это НЕУДОБНО.

Действительно - странный какой-то.

Ты спросил - как правильно.
Тебе ответили.
Ты же считаешь, что у тебя все правильно.
Ну тогда зачем пришел спрашивать, если у тебя все правильно?

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

то есть, рядом с тем полем, в данном случае, где произошла ошибка.

И нормальные люди в твоем кривом случае тебе ничего не посоветуют
 

fog

Рыцарь Джедай
"Как правильно" - никто не ответил. Укажи пальцем где.

Если бы ты внимательно прочитал моё сообщение, ты бы нашел строчку:

строка описания ошибки записывается в глобальную переменную, которая вызывается там где нужно вывести описание ошибки
поэтому скрипт не падает там, где вызывается trigger_error(), в этом месте останавливается работа функции. Ошибка выводится на экран там, где надо.

Неудобно - останавливать скрипт в две строки, а не использовать стандартные функции обработки ошибок.
 

fog

Рыцарь Джедай
Уважаемые, воздержитесь пожалуйста от фраз "в твоем кривом случае тебе ничего не посоветуют", "нормальных людей"

Дело в том, что я пишу в раздел "для новичков", я же не лезу со своими вопросами в раздел для профи. Соответственно мои вопросы могут быть некорректно поставлены, содержать логические ошибки.

Специально для Фаната: Я себя считаю полностью нормальным человеком, я не хочу разжигать флейм.
 

fog

Рыцарь Джедай
Тони, спасибо за наводку. О существовании PEAR я знаю, всё руки не доходили попробовать в действии, похоже теперь займусь.
 

tony2001

TeaM PHPClub
fog:
<очень субъективный совет>
я бы взял саму идею оттуда и реализовал нужные фичи.
уж очень там универсализировано все.
</очень субъективный совет>
 

fog

Рыцарь Джедай
Да, я уже об этом подумал.
Так будет лучше всего ИМХО.
 

tony2001

TeaM PHPClub
если дождешься понедельника - на pear.php.net пересоберут ман и в русском переводе появится часть про PEAR_Error, которая уже переведена.
 
Сверху