这个问题与扩展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
任何人都可以帮助我理解为什么会出现这种行为?如何在初始化类之前使用类方法?
答案 0 :(得分:2)
构造函数在新创建的对象 上被称为 ,因此在调用构造函数时,对象及其所有属性和方法已经存在。这个例子应该很清楚:
<?php
class testParent {
protected $protectedStuff = 1;
public function __construct($intNumber) {
$this->protectedStuff = $intNumber;
}
}
class testChild extends testParent {
public function __construct($intNumber) {
echo get_class() . '<br />'; // testChild
echo get_parent_class() . '<br />'; // testParent
$this->printStuff(); // 1
parent::__construct($intNumber);
$this->printStuff(); // 42
}
public function printStuff() {
echo '<br />The number is now: ' . $this->protectedStuff;
}
}
$objChild = new testChild(42);
结果
testChild
testParent
现在的数字是:1
现在的数字是:42