gpt4 book ai didi

php - 子类构造函数将如何与 php 中的父类构造函数交互?

转载 作者:行者123 更新时间:2023-11-29 01:43:49 25 4
gpt4 key购买 nike

现在,我正在开发两个用于与 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();
}
}

我刚开始写它们,所以它们还没有“内容”。如果有人看到任何重大问题或任何建议,请毫不犹豫地指出。

不过,我的问题是子构造函数将如何与父构造函数交互。我的计划是简单地创建一个 CheckOut 对象而不启动父对象。可以看出,我的父构造函数有四个值。那么,我是否必须在子构造函数中重新定义这些值?明确地说,我的意思是:

class CheckOut extends DB_MySQL{

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

当然还有定义那些变量。还是我可以在创建对象时添加这些值,它会被隐式传递?

感谢任何帮助。

最佳答案

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

只需以下即可:

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

关于php - 子类构造函数将如何与 php 中的父类构造函数交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12453143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com