父类的php调用方法不';行不通

父类的php调用方法不';行不通,php,Php,我正在实现一个简单的oop程序,有些东西我不清楚。有人能解释一下为什么它不起作用吗 我有基类-动物和子类-狗 class Animal { public $name; public function __construct($name) { $this->name = $this->getName(); } public function getName() { return $this->name;

我正在实现一个简单的oop程序,有些东西我不清楚。有人能解释一下为什么它不起作用吗

我有基类-动物和子类-

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;
}