所以我再次阅读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);”
为什么这样做的任何逻辑都会有所帮助。
答案 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();必须在覆盖构造函数时调用。