扩展PHP异常类时代码混乱

时间:2014-04-14 09:18:26

标签: php exception exception-handling

这个问题与扩展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 

任何人都可以帮助我理解为什么会出现这种行为?如何在初始化类之前使用类方法?

1 个答案:

答案 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