我正在尝试构建一个子异常类(ovi_Exception),但在使用__construct()时遇到了问题。我还希望能够在子异常类中访问我的MySQL类,通常我通过以下方式来实现:
require_once( 'lib/Exception.php' );
$Process = new ovi_Exception( $MySQL );作为MySQL类的实例的$MySQL。然后,异常类将如下所示:
class ovi_Exception extends Exception {
private $MySQL = NULL;
public function __construct( $MySQL ) {
$this->MySQL = $MySQL;
}这意味着我现在可以以$this->MySQL->method()的身份访问MySQL类。然而,我知道为了保持异常类正常工作,我需要修改__construct(),如下所示:
public function __construct( $MySQL ) {
$this->MySQL = $MySQL;
parent::__construct( $message, $code = 0 );
}但是现在我得到了未定义的变量通知,并且我不能再从异常中检索getMessage(),这是我想要如何构建这个子类的关键。
parent::__construct( $message = NULL, $code = 0 );删除了通知,但我仍然没有从getMessage()收到任何消息。我真的不明白这个对父__construct()的调用是做什么的。
如何保持对该子异常类中另一个类的访问,并保持异常类的正常行为?我在内部访问其他类的方式是不是另一个根本的缺陷?我以前从来没有遇到过这样的问题,但是对于OOP来说,我还是个新手。
谢谢。
发布于 2013-05-31 02:56:17
为什么不使用setter注入,比如:
class ovi_Exception extends Exception {
private $MySQL = NULL;
public function setMysqlAdapter($MySQL) {
$this->MySQL = $MySQL;
}
}发布于 2013-05-31 02:55:23
这种行为是正常的。您正在创建一个扩展Exception类的新类,但是您没有传递正确的变量。
如果打开原始的Exception类,您将看到
class Exception {
....
public function __construct($message = "", $code = 0, Exception $previous = null) {}
....
}如您所见,Exception类在其构造函数中接收了两个参数($message,$code,$previous)。在扩展Exception类的ovi_Exception中,只有数据库链接变量$MySQL。然后初始化父类Exception,并传递空的/未定义的变量$message, $code = 0。因此,当您尝试ovi_Exception->getMessage()时,收到no错误消息是很正常的。
https://stackoverflow.com/questions/16843670
复制相似问题