'致命错误调用私有方法'但方法受到保护

jwi*_*ner 3 php oop

第一次在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);
  ...
Run Code Online (Sandbox Code Playgroud)

Testprinter扩展了testgiver.这是类的扩展:

require_once('testgiver.php');

class testprinter extends testgiver
{...
Run Code Online (Sandbox Code Playgroud)

并在testgiver中声明方法:

protected function dbConnect($userconnecttype)
{...
Run Code Online (Sandbox Code Playgroud)

再次感谢!

The*_*pha 9

如前所述Alexander Larikov,您无法protected methods从类实例访问,但不仅protected可以访问private方法,还无法从类实例访问方法.要访问protected的方法,parent class从一个实例subclass声明一个public method子类中,然后调用protected 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!
Run Code Online (Sandbox Code Playgroud)

DEMO.