3

第一次在 PHP 中扩展一个类,我收到一个致命错误,说该方法不是私有的。我确定这是基本的东西,但我研究过书籍和论坛,但我无法确定我做了什么来产生这个错误。非常感谢任何帮助。详情如下:

错误信息:

致命错误:从第 726 行 /root/includes/classes/testprinter.php 中的上下文“testprinter”调用私有方法 testgiver::dbConnect()

下面代码中 testprinter 的第 726 行:

private function buildquestionarray()
{
  $query = "etc etc";
  **$conn = $this->dbConnect('read');
  $result = $conn->query($query);
  ...

Testprinter 扩展了 testgiver。这是该类的扩展:

require_once('testgiver.php');

class testprinter extends testgiver
{...

以及 testgiver 中方法的声明:

protected function dbConnect($userconnecttype)
{...

再次感谢!

4

3 回答 3

9

如前所述Alexander Larikov,您不能protected methods从类实例访问,不仅是protected方法,而且您也不private能从类实例访问方法。要从 a的实例访问 a 的protected方法,您在子类中声明 a ,然后从子类的公共方法调用 a 的方法,即parent classsubclasspublic methodprotected methodparent class

class testgiver{
    protected function dbConnect($userconnecttype)
    {
        echo "dbConnect called with the argument ".$userconnecttype ."!";
    }
}

class testprinter extends testgiver
{
    public function buildquestionarray() // public instead of private so you can call it from the class instance
    {
        $this->dbConnect('read');
   }
}

$tp=new testprinter();
$tp->buildquestionarray(); // output: dbConnect called with the argument read!

演示。

于 2012-08-01T04:33:48.173 回答
0

您不能从类实例访问受保护的方法。阅读文件Members declared protected can be accessed only within the class itself and by inherited and parent classes

于 2012-08-01T04:07:27.073 回答
0

Alpha,写的很棒!

我觉得我几乎已经在我想要的地方得到了它,但是我得到了

Fatal Error, call to undefined method NameofClass::myFunction() in line 123456

我在这里缺少什么吗?

我的原始类和扩展类都在同一个 .php 文件中,但对 myFunction 的调用发生在不同的文件中。这是不允许的吗?

注意:我会把它放在评论中,但系统不会让我在我的声誉达到 50 之前包含评论。

于 2016-03-11T19:28:05.250 回答