0

現在、Dog と呼ばれるクラスと Poodle と呼ばれるクラスの 2 つのクラスがあります。Poodle クラスの Dog で定義された変数を使用するにはどうすればよいでしょうか。私のコードは次のとおりです。

  class dog {
       protected static $name = '';

       function __construct($name) {
            $this->name = $name
       }
  }

  class Poodle extends dog {
       function __construct($name) {
           parent::__construct($name)
       } 

       function getName(){
           return parent::$name;
       }
  }

$poodle = new Poodle("Benjy");
print $poodle->getName();

このエラーが発生します

Notice: 未定義の変数: name

4

3 に答える 3

5

「名前」は具体的な犬の属性だと思うので、そもそも静的であってはなりません。継承されたクラス内から静的でない親クラスの属性にアクセスするには、「$this」を使用するだけです。

    class dog {
       protected $name = '';

       function __construct($name) {
            $this->name = $name;
       }
    }

    class Poodle extends dog {
       function getName(){
           return $this->name;
       }
    }
于 2009-10-11T11:58:00.027 に答える
2

問題はDogコンストラクタにあります。あなたが書いた:

$this->name = $name;

しかし、使用すると、実際には静的変数であるにもかかわらず、それがインスタンス変数であることを$this意味します。これを次のように変更します。name

self::$name = $name;

それはうまくいくはずです。

于 2009-10-11T11:55:21.747 に答える
0

あなたの犬のクラスでは、変数 $name をstaticとして宣言しました。静的な単語なしで変数を宣言する必要があります

class dog {
   protected $name = '';

   function __construct($name) {
        $this->name = $name
   }
}



class Poodle extends dog {
   function __construct($name) {
       parent::__construct($name)
   } 

   function getName(){
       return $this->name;
   }
}

$poodle = new Poodle("Benjy");
print $poodle->getName();
于 2009-10-11T11:57:31.043 に答える