异常类中的php父构造函数

时间:2013-02-18 13:34:24

标签: php exception parent construct

所以我再次阅读php手册并看到一个自定义异常代码的注释,以调用父Exception构造函数,但不明白这个目的。

以下是代码:

class MyException extends Exception
{
        // Redefine the exception so message isn't optional
        public function __construct($message, $code = 0) {
        // some code

        // make sure everything is assigned properly
        parent::__construct($message, $code);
    }

    // custom string representation of object
    public function __toString() {
    return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
    }

    public function customFunction() {
        echo "A custom function for this type of exception\n";
    }
}

我不明白“//确保所有内容都被正确分配的逻辑是父:: __构造($ message,$ code);”

为什么这样做的任何逻辑都会有所帮助。

3 个答案:

答案 0 :(得分:1)

当您覆盖构造函数方法时,PHP不会自动调用父的构造函数方法。因此,如果仍然需要父代的构造函数,则必须手动调用它。

答案 1 :(得分:1)

异常类包含自己的属性,例如$code$message

他们对儿童班非常敏感,例如:

class Exception {
  protected $code ;
  protected $message ;

  public function __construct($code, $message){
    $this->code = $code ;
    $this->message = $message ;

    //AND some important default actions are performed
    //when class is instantiated.
  }
}

因此,在您致电parent::__construct()

之后

您的子类将正确设置实例变量$code$message

$myEx = new MyException("10", "DB Error") ;
//Now you can get the error code, because it was set in its parent constructor:
$code = $myEx->getCode() ;

答案 2 :(得分:0)

PHP的基本Exception类将消息/代码分配给某些内部属性。 我确定这个类的作者可能没有编写_ construct();但在这种情况下,他想证明那个父:: _construct();必须在覆盖构造函数时调用。