Чтобы следовать стилю Kohana, я бы порекомендовал вам использовать:
Class Martbooks_Exception Extends Kohana_Exception
в качестве объявления и поместите файл с именем exception.php
в classes/martbooks
. Это следует стилю Kohana.
Расширение Kohana_Exception
вместо Exception
позволяет использовать подстановку переменных вдоль строк
throw new Martbooks_Exception ('this is a :v', array (':v' => 'variable', ));
Что касается определения __construct()
-метода, то часть echo $msg;
не будет my предпочтительным способом решения ошибок, любой вывод должен быть выполнен в блоке, который перехватывает исключение. То же самое можно утверждать и в случае вызова 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
'__construct()
.
Единственное возражение против ведения журнала с уровнем Log::ERROR
в конструкторе заключается в том, что предполагается, что каждое исключение является ошибкой уровня приложения, что может быть справедливо для некоторых типов исключений, но также может использоваться для сигнализации другие значения. Точное значение исключения следует оставить в блоке обработки исключений.