0

以下のようなクラス階層があります。

class foo()
{
   function __construct($dfnname) {
      $this->callf = $dfnname;
   }
   function getd()
   {
      return call_user_func($this->callf);
   }
   function retrieve()
   {
      return $this->getd();
   }
}

class bar extends foo
{
   function getd()
   {
      return 'invalid call';
   }
   function getc()
   {
      return 'valid call';
   }
}

$ins = new bar('getc');
echo $ins->retrieve();

私は答えを得ています'invalid call'。「有効な呼び出し」という回答を取得したい。

from 関数のせいかもしれませんが、 をfoo=>retrieve()呼び出します$this->getd()。ここでは、 を呼び出す代わりに、 をfoo=>getd()直接呼び出してbar=>getd()います。関数を呼び出す必要がfoo=>getd()ありfoo=>retrieve()ます 。call_user_func($this->callf)foo=>getd()bar=>getc()

基本的な継承の概念が欠けていることはわかっています。私を案内してください。

4

1 に答える 1

0

このようなもの?

class foo
{
   function __construct($dfnname) {
      $this->callf = $dfnname;
   }
   private function getd()
   {
      return call_user_func($this->callf);
   }

   private function getc()
   {

   }
   function retrieve()
   {
      return $this->getd();
   }
}

class bar extends foo
{


}

$ins = new bar('getc');
echo $ins->retrieve();

Visibility in PHPに関するドキュメントを読みましたか?

于 2013-03-27T08:47:36.540 に答える