PHP超类的构造在子类中不起作用

时间:2014-03-16 13:41:26

标签: php inheritance

我在php中继承__costruct()方法时遇到问题。 这是我的超级班:

class MyDataMapper
{
    private $connection; 
    function __construct()
    {
        $this -> connection = new mysqli($HOST, $DB_USER, $PASS, $DB_TABLE);      
    }
    //other methods...
}

我需要使用一个扩展上面的类的新类,所以这就是我所做的:

class DataMapperExtends exstends MyDataMapper
{
    function __construct()
    {
        parent::construct();           
    }
    //other methods...
}

但由于某种原因,这不起作用:我得到一个mysqli错误,发生在我的一个SQL查询的prapre语句上(错误:在非对象上调用成员函数prepare())。 像这样:

   <?php $stmt = $this -> connection -> prepare($query); ?>

我不知道为什么会发生这种情况,似乎连接没有初始化。如果我写这个,不要认为子类中有错误:

   <?php
     class DataMapperExtends extends MyDataMapper
     {
        public function __construct()
        {
         //even if it does not make a lot of sense
         $this -> connection = new mysqli($HOST, $DB_USER, $PASS, $DB_TABLE);      

        }
     }
   ?>
一切正常。 我的超类中有错误吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您需要将类中的某些内容继承到子类,请将其声明为protected,而不是private。受保护的成员和方法可由子类(以及父类)访问。私有成员和方法只能在声明它们的特定类中访问。

答案 1 :(得分:1)

您的变量连接被定义为私有

private $connection; 

私人只在课堂上提供。

因此,对于需要访问的子类protected

http://www.php.net/manual/en/language.oop5.visibility.php