0

子例外クラス ( ) を作成しようとしてovi_Exceptionいますが、__construct() で問題が発生しています。子 Exception クラスの MySQL クラスにもアクセスできるようにしたいのですが、通常は次のようにしてこれを行います。

require_once( 'lib/Exception.php' );
$Process = new ovi_Exception( $MySQL );

$MySQLMySQL クラスのインスタンスです。例外クラスは次のようになります。

class ovi_Exception extends Exception {

private $MySQL = NULL;      

public function __construct( $MySQL ) {

    $this->MySQL = $MySQL;

}

つまり、MySQL クラスに としてアクセスできるようになりました$this->MySQL->method()__construct()ただし、例外クラスを通常どおりに機能させるには、次のように修正する必要があることを知っています。

public function __construct( $MySQL ) {

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

}

getMessage()しかし、未定義の変数通知が表示され、この子クラスをどのように構築するかの鍵となる例外から取得できなくなりました。

parent::__construct( $message = NULL, $code = 0 );通知を削除しますが、 からはまだ何も得られませんgetMessage()。この親への呼び出しが何をしているのかよくわかりません__construct()

この子例外クラス内の別のクラスへのアクセスを維持し、例外クラスを通常どおりに動作させるにはどうすればよいですか? 別のクラス内の他のクラスにアクセスする方法に根本的な欠陥がありますか? これまでにこれを行う際に問題が発生したことはありませんが、OOP にはかなり慣れていません。

ありがとう。

4

2 に答える 2

3

この動作は正常です。クラスを拡張する新しいクラスを作成してExceptionいますが、適切な変数を渡していません。

Exception元のクラスを開くと、

class Exception {
    ....
    public function __construct($message = "", $code = 0, Exception $previous = null)  {}
    ....
}

ご覧のとおり、クラスはコンストラクターでExceptionいくつかのパラメーター ( ) を受け取ります。クラスを拡張して$message,$code,$previousいるには、データベース リンク変数しかありません。次に、親クラスを初期化し、空/未定義の変数を渡します。したがって、 を試してもエラー メッセージが表示されないのはごく普通のことです。ovi_ExceptionException$MySQLException$message, $code = 0ovi_Exception->getMessage()

于 2013-05-30T18:55:22.643 に答える
3

次のようなセッター注入を使用しなかったのはなぜですか。

class ovi_Exception extends Exception {
    private $MySQL = NULL; 
    public function setMysqlAdapter($MySQL) {
        $this->MySQL = $MySQL;
    }
}
于 2013-05-30T18:56:17.083 に答える