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を宣言し、サブクラスのpublic メソッドからを呼び出します。つまり、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

アルファ、素晴らしい記事です!

欲しいところにほぼ到達したような気がしますが、取得しています

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

私がここに欠けているものはありますか?

元のクラスと拡張クラスは両方とも同じ .php ファイルにありますが、myFunction の呼び出しは別のファイルで行われています。それは許されませんか?

注:これをコメントに入れますが、評価が 50 になるまで、システムはコメントを含めることを許可しません。

于 2016-03-11T19:28:05.250 に答える
0

クラス インスタンスから保護されたメソッドにアクセスすることはできません。言うドキュメントを読むMembers declared protected can be accessed only within the class itself and by inherited and parent classes

于 2012-08-01T04:07:27.073 に答える