1

現在これを行っているのですが、

class Page {
    // variable to hold DBC class
    public $dbc;
    /*
        __CONSTRUCT
        Called when class is initiated and sets the dbc variable to hold the DBC class.
    */
    public function __construct() {
        // set the dbc variable to hold the DBC class
        $this -> dbc = new DBC();
    }
    /*
        CREATE PAGE
        Create a page with the option to pass data into it.
    */
    public function create($title, $class, $data = false) {
        // start buffer
        ob_start('gz_handler');
        // content
        content($this -> dbc, $data);
        // end buffer and flush
        ob_end_flush();
    }

}

例を簡略化しましたが、基本的にDBCメソッド内の関数にオブジェクトを渡す必要がありますcreateか?

extends以前に使用していたが、拡張クラスを変数に抽出する方法がないことに気付いたので、これは悪い習慣と見なされますか?

ありがとう

4

2 に答える 2

4

依存性注入の設計パターンに非常に近づいています。

次のように、オブジェクトをパラメーターとして受け入れるようにコンストラクターを変更するだけです。

public function __construct( $dbc) {
    // set the dbc variable to hold the DBC class
    $this -> dbc = $dbc;
}

次に、次のように、データベース接続を使用してクラスをインスタンス化します。

$dbc = new DBC();
$page = new Page( $dbc);

これには、テストの容易さから、データベースへの単一接続の確立まで、さまざまな利点があります。5 つPageのオブジェクトが必要であるとします。これらのオブジェクトにすべて同じデータベース接続を渡すと、個別に作成する必要がなくなります。

于 2012-06-14T22:31:01.550 に答える
0

DBC内部でオブジェクトを作成する代わりに、クラス インスタンスをコンストラクターに渡す必要があります。これはhttps://en.wikipedia.org/wiki/Dependency_injectiondependency injectionと呼ばれます。

于 2012-06-14T22:31:38.977 に答える