0

子クラスが多すぎるため、「eg」getName() 関数が含まれている場合はそれらを処理し、「スーパー クラス」でそれらをオーバーライドし、それぞれに「a」を出力したいと考えています。どうすればこれを実装できますか?

<?php
   class SuperClass{
      public function getName(){
          echo 'a';
      }
   }
   class ChildClass extends SuperClass{
      public function getName(){
          echo 'b';
      }
   }
   class SecondChildClass extends SuperClass{
      public function getName(){
          echo 'c';
      }
   }
$a = new ChildClass();
$a->getName(); //prints a
$b = new SecondChildClass();
$b->getName(); //prints a
?>
4

1 に答える 1

4

あなたの例では、正しく機能するには、スーパークラスから getName() 関数を削除するだけです。それでも時々 SuperClass getName を呼び出したい場合は、SuperClass getName 関数をオーバーロードしてみてください。

getName($flag)

そうすることで、SuperClass 変数をクラス化したい場合にフラグを渡します。それ以外の場合は、子クラスが呼び出されます。

<?php
   class SuperClass{
      public function getName($flag){
          echo 'a';
      }
   }
   class ChildClass extends SuperClass{
      public function getName(){
          echo 'b';
      }
   }
   class SecondChildClass extends SuperClass{
      public function getName(){
          echo 'c';
      }
   }

   $a = new ChildClass();
   $a->getName(); //prints b
   $a->getName(true); //prints a
   $b = new SecondChildClass();
   $b->getName(); //prints c
   $b->getName(true); //prints a
?>
于 2012-07-27T13:51:01.300 に答える