Php 在子方法中访问父变量
我现在有两个班,一个叫狗,一个叫狮子狗。现在我如何使用Poodle类中Dog中定义的变量。我的代码如下:Php 在子方法中访问父变量,php,class,scope,private-members,Php,Class,Scope,Private Members,我现在有两个班,一个叫狗,一个叫狮子狗。现在我如何使用Poodle类中Dog中定义的变量。我的代码如下: class dog { protected static $name = ''; function __construct($name) { $this->name = $name } } class Poodle extends dog { function __construct($na
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
问题出在您的
狗构造函数中。你写道:
$this->name = $name;
但是使用$this
意味着name
是一个实例变量,而实际上它是一个静态变量。将其更改为:
self::$name = $name;
这应该很好。在您的dog类中,您已经将变量$name声明为static,您必须在声明变量时不使用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();
我猜“name”是混凝土狗的一个属性,所以它首先不应该是静态的。要从继承类中访问非静态父类属性,只需使用“$this”
你们不需要继承吗?哦,对不起,伙计们,我在这里发布代码时遗漏了一点。它仍然不能与extends一起工作,但是让dog的所有(固有的)实例具有相同的名称没有多大意义,所以静态在这里没有多大意义。
class dog {
protected $name = '';
function __construct($name) {
$this->name = $name;
}
}
class Poodle extends dog {
function getName(){
return $this->name;
}
}