0

我目前有两个班,一个叫Dog,一个叫Poodle。现在如何使用 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();

我收到这个错误

注意:未定义的变量:名称

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 回答