Чтобы следовать стилю Kohana я рекомендовал бы использовать:
Class Martbooks_Exception Extends Kohana_Exception
декларативно и поместить файл с именем exception.php
в classes/martbooks
. Это следует за стилем Коханы.
Расширение Kohana_Exception
вместо Exception
позволяет использовать подстановку переменных вдоль линий
throw new Martbooks_Exception ('this is a :v', array (':v' => 'variable',));
Что касается определяющей в __construct()
-метода, то echo $msg;
часть не будет мой предпочтительный способ решения обработки ошибок , любое эхо должно быть сделано в блоке, который ловит исключение. То же самое можно было бы аргументировать в случае вызова Kohana::$log->add()
, но если вы хотите вести журнал каждые Martbooks_Exception
, ваше решение отлично подходит. В этом случае я бы переписать код:
Class Martbooks_Exception Extends Kohana_Exception
{
public function __construct($message, array $variables = NULL, $code = 0)
{
parent::__construct ($message, $variables, $code);
Kohana::$log->add (Log::ERROR, __ ($message, $variables));
}
}
с определением __construct()
, что соответствует Kohana_Exception
«s __construct()
.
Единственное возражение, которое я хотел бы противопоставить протоколу с уровнем Log::ERROR
в конструкторе, заключается в том, что он предполагает, что каждое исключение представляет собой ошибку уровня приложения, которая может относиться к некоторым типам исключений, но она также может использоваться для сигнализации других значения. Точный смысл исключения следует оставить в блоке обработки исключений.