我在尝试理解父类和子类之间的关系时,玩弄了一些类。 我设置了一个构造函数来调用初始化方法。 然后当我在子类中添加一个init方法时,它会覆盖父类的init方法,不是吗? 但实际情况是两个方法都被调用了。
为了测试这一点,我编写了一个名为Model的类和一个子类Instance。 这是代码:
$try = new Instance;
echo $try;
class Model{
public function __construct(){
$this->init();
}
public function init()
{
return $this->className();
}
public function __toString()
{
return $this->className();
}
public static function className()
{
return get_called_class();
}
}
class Instance extends Model
{
public function init()
{
echo "tada! ";
}
}
提供以下输出:
tada! Instance.
在类模型中,我使用了魔术方法__toString()将类名作为字符串返回。父类的构造函数调用父init()方法,在这种情况下,它会输出类名。
我的理解是,如果我编写一个子类,例如Instance类,并且具有一个init()方法,它将覆盖父init()方法,但实际上并非如此。在这种情况下,它返回了两个init方法,我不知道为什么。有人能解释一下吗?