1

私は抽象クラスを持っており、基本的には定数、変数、抽象メソッド、および非抽象/通常のメソッドの束を定義しています。典型的な構造は次のようになります。

abstract class ClassName{
 const CONSTANT_NAME = "test";
 protected static $variable_1 = "value";
 protected $variable_2 = "value_2";
 protected $variable_3 = "value_3"
 abstract function doSomething();
 protected function doSomethingElse();
}

問題は、このクラスを拡張し、子クラスの保護された変数にアクセスする必要がある場合です。次に例を示します。

public class ChildClassName extends ClassName{

   public function accessParentClassMembers()
   {
    echo parent::$variable_1;  // WORKS FINE
    echo parent::$variable_2; // OBVIOUSLY DOESN'T WORK because it is not a static variable
   }
}

問題は、$variable_2 にアクセスするにはどうすればよいかということです。つまり、子クラスが抽象親クラス*メンバー変数* にアクセスするにはどうすればよいですか?

4

2 に答える 2

2

3 つのエラーがあります。ここに実用的な例があります。コードのコメントを参照してください

//    |------- public is not allowed for classes in php
//    |
/* public */ class ChildClassName extends ClassName{

       // has to be implemented as it is declared abstract in parent class
       protected function doSomething() {

       }

       public function accessParentClassMembers() {

           // note that the following two lines follow the same terminology as 
           // if the base class where non abstract

           // ok, as $variable_1 is static
           echo parent::$variable_1;

           // use this-> instead of parent:: 
           // for non static instance members
           echo $this->variable_2;
   }
}

さらに、次のことに注意してください。

protected function doSomethingElse();

親クラスでは機能しません。これは、すべての非抽象メソッドが本体を持つ必要があるためです。したがって、次の 2 つの選択肢があります。

abstract protected function doSomethingElse();

また

protected function doSomethingElse() {}
于 2013-03-07T20:43:10.290 に答える