在class变量中存储一个类,我做得对吗? PHP

I am doing this currently,

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

}

I have simplified the example, but basically I need to pass the object DBC to a function inside the method create?

Is this considered bad practice as I was using extends before but realised there was no way to extract the extended class to a variable?

Thanks

You're very close to the dependency injection design pattern.

You just have to change your constructor to accept the object as a parameter, like so:

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

Then instantiate your class with the database connection, like so:

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

This has a variety of benefits, ranging from easier to test, to making a single connection to the database. Imagine you need five Page objects - Now you pass them all the same database connection so they do not need to individually create one.

You should pass DBC class instance to constructor instead of creating the object inside. This is called dependency injection: https://en.wikipedia.org/wiki/Dependency_injection .