首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展异常类中断getMessage()

扩展异常类中断getMessage()
EN

Stack Overflow用户
提问于 2013-05-31 02:44:34
回答 2查看 251关注 0票数 0

我正在尝试构建一个子异常类(ovi_Exception),但在使用__construct()时遇到了问题。我还希望能够在子异常类中访问我的MySQL类,通常我通过以下方式来实现:

代码语言:javascript
复制
require_once( 'lib/Exception.php' );
$Process = new ovi_Exception( $MySQL );

作为MySQL类的实例的$MySQL。然后,异常类将如下所示:

代码语言:javascript
复制
class ovi_Exception extends Exception {

private $MySQL = NULL;      

public function __construct( $MySQL ) {

    $this->MySQL = $MySQL;

}

这意味着我现在可以以$this->MySQL->method()的身份访问MySQL类。然而,我知道为了保持异常类正常工作,我需要修改__construct(),如下所示:

代码语言:javascript
复制
public function __construct( $MySQL ) {

    $this->MySQL = $MySQL;
    parent::__construct( $message, $code = 0 );

}

但是现在我得到了未定义的变量通知,并且我不能再从异常中检索getMessage(),这是我想要如何构建这个子类的关键。

parent::__construct( $message = NULL, $code = 0 );删除了通知,但我仍然没有从getMessage()收到任何消息。我真的不明白这个对父__construct()的调用是做什么的。

如何保持对该子异常类中另一个类的访问,并保持异常类的正常行为?我在内部访问其他类的方式是不是另一个根本的缺陷?我以前从来没有遇到过这样的问题,但是对于OOP来说,我还是个新手。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-31 02:56:17

为什么不使用setter注入,比如:

代码语言:javascript
复制
class ovi_Exception extends Exception {
    private $MySQL = NULL; 
    public function setMysqlAdapter($MySQL) {
        $this->MySQL = $MySQL;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2013-05-31 02:55:23

这种行为是正常的。您正在创建一个扩展Exception类的新类,但是您没有传递正确的变量。

如果打开原始的Exception类,您将看到

代码语言:javascript
复制
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错误消息是很正常的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16843670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档