【发布时间】:2014-04-14 17:59:23
【问题描述】:
这个问题与扩展 PHP 异常类有关,有很多类似的问题,但这个问题不同。
我正在尝试扩展 PHP 异常类,以便可以将某些值添加到异常消息中。下面是我的代码。
class Om_Exception extends Exception {
public function __construct($message, $code = 0, Exception $previous = null) {
$message = $this->_getMessage($message);
parent::__construct($message, $code, $previous);
}
protected function _getMessage($message) {
$exception = '<br />';
$exception .= '<b>Exception => </b>'.$message.'<br />';
$exception .= '<b>Class => </b>'.get_called_class().'<br />';
$exception .= '<b>Error Line => </b>'.$this->getLine().'<br />';
$exception .= '<b>Error File => </b>'.$this->getFile().'<br />';
return $exception;
}
}
这很好用。这就是我的问题。
由于我在调用父类的构造函数之前调用了父类的函数getLine() 和getFile(),它们不应该返回空白值吗?如果没有错误?
但这工作正常,我得到下面描述的输出。
Exception => hello..
Class => Om_Controller_Exception
Error Line => 30
Error File => C:\Users\Jay\Projects\order-manager\application\modules\default\controllers\LoginController.php
谁能帮我理解为什么会出现这种行为?在初始化类之前如何使用类方法?
【问题讨论】:
-
“在调用它的构造函数之前”是什么意思?你的类有构造函数,它显式调用父构造函数
-
@AlmaDo 在调用父构造函数之前调用_getMessage()方法,该方法调用父类的getLine()和getFile()方法。
-
那又怎样?您的方法将被继承,它们的实现也将被继承。因此,您的通话将使用标准的
Exception方法 -
构造函数初始化属性,而不是方法。您可以在父构造函数之前调用任何方法,除非它不使用未初始化的属性
-
Exception是 PHP 中一个特殊的内置类。$code、$file和$line属性在构造函数执行之前填充。
标签: php exception exception-handling