在PHP函数中未正确引用父类和子类
我正在构建一个MVC组件,我遇到了一个关于父模型和子模型的问题。我在父模型中有一些方法,它们不处理database_类对象 建造师工作得很好 但是当我在方法中使用这个对象时,它就像构造器不存在一样在PHP函数中未正确引用父类和子类,php,oop,inheritance,Php,Oop,Inheritance,我正在构建一个MVC组件,我遇到了一个关于父模型和子模型的问题。我在父模型中有一些方法,它们不处理database_类对象 建造师工作得很好 但是当我在方法中使用这个对象时,它就像构造器不存在一样 Class Controlller { public function __construct() { $this->childModel = $this->model('childModel');
Class Controlller
{
public function __construct()
{
$this->childModel = $this->model('childModel');
} // end construct
// methods go here
}
以下是模型:
class childModel extends parentModel {
private $dbo;
public function __construct()
{
$dbobj = new Database_class;
$this->dbo = $dbobj;
}
//methods
}
class parentModel {
private $dbom;
public function __construct()
{
$dbombj = new Database_class;
$this->dbom = $dbombj;
var_dump($this->dbom); //working perfectly as database object
}
public function methodName()
{
var_dump($this->dbom); //not showing up as database object
}
}
我不认为这个代码正在做你认为它正在做的事情。在
childModel
中,您正在覆盖parentModel的\uuu构造
方法,因此parentModel中的\uu构造
永远不会被调用。因此,$this->dbom
应该为空。此外,如果您希望从childModel中使用$this->dbom
,您可能应该将作用域从private$dbom
更改为protected$dbom
。查看此页面了解更多信息:我不需要从子模型访问$this->dbom。但是,我不想覆盖parentModel的_-construct方法,那么如何修复它呢?我想让两个构造一起工作?您可以使用parent::\uu construct()在childModel的\u construct()
中调用它。这真的违背了“extends”和parentModel的目的吗?我不想对我拥有的每个childModel都这样做?如果我删除了childModel的构造函数,父构造函数还会被覆盖吗?