如何将一个子类的构造函数在PHP父类的构造函数互动?(How will a child class

2019-09-22 12:49发布

现在,我正在开发两个班的互动与MySQL数据库 - 一个扩展了其他。 他们来了:

class DB_MySQL {

    protected $dbuser;
    protected $dbpass;
    protected $dbhost;
    protected $dbname;
    protected $dbh; // Database connection handle

    public function __construct($dbuser, $dbpass, $dbhost, $dbname)
    {
        $this->dbuser = $dbuser;
        $this->dbpass = $$dbpass;
        $this->dbhost = $dbhost;
        $this->dbname = $dbname;
    }

    //Used to create connections - almost always called by execute()
    protected function connect()
    {
        try
        {
            $this->dbh = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
        }
        catch(PDOException $e)
        {
            print "Error!: ".$e->getMessage()."<br/>";
            die();
        }
    }

和子类:

class CheckOut extends DB_MySQL{

     function __construct() 
    {
        parent::__construct();
    }
}

我刚开始写他们,所以没有“肉”给他们呢。 如果有人看到任何重大问题或有任何建议,请不要犹豫,指出来。

我的问题,虽然是孩子的构造如何与家长的互动。 我的计划是简单地创建结账对象而不起始父母的。 由于可以看出,我的父类的构造需要四个值。 所以,我要在孩子的构造函数来重新定义这些价值观? 需要明确的是,我的意思是:

class CheckOut extends DB_MySQL{

     function __construct($dbuser, $dbpass, $dbhost, $dbname) 
    {
        parent::__construct($dbuser, $dbpass, $dbhost, $dbname);
    }
}

当然定义这些变量。 或者可以当我创建的对象,它会暗中传递我添加这些值?

任何帮助表示赞赏。

Answer 1:

如果子类的构造函数没有做任何其他事情,那么你可以省略构造函数。

就在下面是确定:

class CheckOut extends DB_MySQL{
}

但是,如果子类的构造函数需要做一些其他的工作,是的,你需要做的:

class CheckOut extends DB_MySQL{

    public function __construct($dbuser, $dbpass, $dbhost, $dbname) 
    {
        parent::__construct($dbuser, $dbpass, $dbhost, $dbname);
        do_some_other_work();
    }
}

当你使用,你都需要调用:

$checkout = new CheckOut($dbuser, $dbpass, $dbhost, $dbname);


Answer 2:

你在你的问题给出的代码做在这种情况下,正确的方法(假设你想要做的构造别的东西):

class CheckOut extends DB_MySQL{
    function __construct($dbuser, $dbpass, $dbhost, $dbname) 
    {
        parent::__construct($dbuser, $dbpass, $dbhost, $dbname);
    }
}

否则(如果你不想做任何事情在构造函数中其他人)你不需要重写构造。

class CheckOut extends DB_MySQL{

    // no constructor, Parent's constructor is called by default

}


文章来源: How will a child class constructor interact with a parent class constructor in php?