【问题标题】:Parent and child classes not referencing correctly within a function PHP父类和子类在函数 PHP 中没有正确引用
【发布时间】:2018-09-29 19:31:28
【问题描述】:

我正在构建一个 MVC 组件,但遇到了父子模型的问题。我在父模型中有一些方法,它们不使用 database_class 对象 构造函数工作正常 但是当我在方法中使用该对象时,它就像构造函数不存在一样?

  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
      }
    }

【问题讨论】:

    标签: php oop inheritance


    【解决方案1】:

    我不认为这段代码正在做你认为它正在做的事情。在childModel 中,您将覆盖父模型的__construct 方法,因此父模型中的__construct 永远不会被调用。因此$this->dbom 应该为空。此外,如果您希望使用 childModel 中的$this->dbom,您可能应该将范围从private $dbom 更改为protected $dbom。有关详细信息,请参阅此页面:http://php.net/manual/en/language.oop5.visibility.php

    【讨论】:

    • 我不需要从子模型访问 $this->dbom。但是,我不想覆盖 parentModel 的 _construct 方法,那么我该如何解决呢?我想让这两个构造一起工作吗?
    • 您可以在childModel的__construct()中使用parent::__construct();来调用它。
    • 这不是真的违背了“扩展”和 parentModel 的目的 - 我不想对我拥有的每个 childModel 都这样做吗?如果我删除 childModel 的构造函数,Parent 构造函数是否仍会被覆盖?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2020-02-09
    相关资源
    最近更新 更多