我不确定该怎么称呼,所以随时编辑标题。
我正在尝试创建自己的API。在这个API中有某些对象,这些对象都扩展了超类ApiObject
:
class ApiObject {
protected $sqltemplate;
public function __construct($db){
$this->sqltemplate = new sqlTemplates($db);
}
protected function getTemplate(){
return $this->sqltemplate;
}
}
现在扩展此类的对象的示例是:
class Group extends ApiObject {
public function __construct(){
}
public function findByUserId(){
}
public function findByTeam(){
}
现在我的问题如下:
当我构造一个Group
对象的类型时,总是调用ApiObject
的构造函数?如果是这样,它如何将参数$db
传递给构造函数?
答案 0 :(得分:1)
你拥有所有代码,为什么不尝试呢?
<?php
class ApiObject {
public function __construct($db){
echo __METHOD__, "($db)\n";
}
}
class Group extends ApiObject {
public function __construct(){
echo __METHOD__, "\n";
}
}
new Group;
输出
Group::__construct
这表明不会自动调用父对象的构造函数。您必须通过parent::__construct($db)
执行此操作,并将$db
参数添加到第二个构造函数。
<?php
class ApiObject {
public function __construct($db){
echo __METHOD__, "($db)\n";
}
}
class Group extends ApiObject {
public function __construct($db){
echo __METHOD__, "\n";
parent::__construct($db);
}
}
new Group("db");
输出
Group::__construct
ApiObject::__construct(db)
为了更好地理解:Group::__construct
覆盖父构造函数,这就是你必须手动调用它的原因。如果未指定构造函数,则会自动调用父构造函数。例如:
<?php
class ApiObject {
public function __construct($db){
echo __METHOD__, "($db)\n";
}
}
class Group extends ApiObject {
}
new Group("db");
输出
ApiObject::__construct(db)