在子方法中访问父变量

时间:2009-10-11 11:43:20

标签: php class scope private-members

我目前有两个班,一个名叫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();

我收到此错误

  

注意:未定义的变量:name

3 个答案:

答案 0 :(得分:5)

我猜'name'是具体Dog的一个属性,因此它首先不应该是静态的。要从继承的类中访问非静态父类属性,只需使用“$ this”。

    class dog {
       protected $name = '';

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

    class Poodle extends dog {
       function getName(){
           return $this->name;
       }
    }

答案 1 :(得分:2)

问题出在您的Dog构造函数中。你写道:

$this->name = $name;

但是使用$this意味着name实例变量,而实际上它是静态变量。将其更改为:

self::$name = $name;

这应该可以正常工作。

答案 2 :(得分: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();