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