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);

这有很多好处,从更容易测试到与数据库建立单一连接。想象一下,您需要五个Page对象 - 现在您将它们传递给所有相同的数据库连接,因此它们不需要单独创建一个。

于 2012-06-14T22:31:01.550 回答
0

您应该将DBC类​​实例传递给构造函数,而不是在内部创建对象。这称为dependency injectionhttps ://en.wikipedia.org/wiki/Dependency_injection 。

于 2012-06-14T22:31:38.977 回答