父类的php调用方法不';行不通
我正在实现一个简单的oop程序,有些东西我不清楚。有人能解释一下为什么它不起作用吗 我有基类-动物和子类-狗父类的php调用方法不';行不通,php,Php,我正在实现一个简单的oop程序,有些东西我不清楚。有人能解释一下为什么它不起作用吗 我有基类-动物和子类-狗 class Animal { public $name; public function __construct($name) { $this->name = $this->getName(); } public function getName() { return $this->name;
class Animal {
public $name;
public function __construct($name)
{
$this->name = $this->getName();
}
public function getName()
{
return $this->name;
}
}
class Dog extends Animal
{
public function __construct($name)
{
parent::__construct($name);
}
public function print()
{
return "Dog name is " . $this->getName();
}
}
以及我测试它的index.php
文件
这个程序的输出就是狗的名字是你的动物构造错误的。您正在使用其getter设置变量。。。使用构造函数的参数。派生类构造函数将$name变量发送给基类,但它从未实际将其分配给任何一个类的name属性 试一试
看看这是否会改变你的输出。好吧,看看你的构造函数做了什么:
public function __construct($name)
{
// you assign to $this->name the return value of $this->getName()...which at that time, is null.
$this->name = $this->getName();
}
您应该使用传递给构造函数的$name
参数:
public function __construct($name)
{
// okay!
$this->name = $name;
}
您何时将
$name
分配给$this->name
。。。?提示:永远不会。$this->name=$this->getName()
应该是$this->name=$name动物构造中的代码>。^Yes接受@3x14159265的建议。如果您使用IDE,例如NetBeans,它将警告您,$name
是一个未使用的参数,这将有助于指示可能存在问题。(顺便说一句,不要担心否决票。您的问题格式良好,足够详细,可以回答-通常-4表示问题太广泛或不清楚)。如果@moonwave99的答案是令人满意的,或者其他答案中的一个是令人满意的,请您在上面标记一个答案好吗?谢谢
public function __construct($name)
{
// you assign to $this->name the return value of $this->getName()...which at that time, is null.
$this->name = $this->getName();
}
public function __construct($name)
{
// okay!
$this->name = $name;
}