<?php
abstract class DadBuilder{
abstract protected function __construct();
}
class Dad extends DadBuilder{
protected function __construct(){
print __CLASS__;
}
}
class Child extends DadBuilder{
public function __construct(){
new Dad(); //Why this not throwing an error?
}
}
$child = new Child();
为什么Child :: __构造函数不会抛出错误,因为它不直接从Dad
类继承
答案 0 :(得分:0)
我被引导相信答案是PHP Bug。如果我删除了abstract
前面的class DadBuilder
,我发现 会抛出相应的错误:
<?php
class DadBuilder {
protected function __construct() {}
}
class Dad extends DadBuilder {
protected function __construct(){
print __CLASS__;
}
}
class Child extends DadBuilder {
public function __construct(){
new Dad(); //Why this not throwing an error?
}
}
$child = new Child();
给出:
致命错误:从上下文调用受保护的Dad :: __ construct()&#39; Child&#39; 在/Users/dfarrell/git/provisioning/vagrant/singlestack/t.php上线 12
因此,我不得不得出结论,这是PHP的OO实现的另一个问题。 IT必须为Dad
实现与Child
相同的抽象功能并且无法识别范围这一事实感到磕磕绊绊。
&lt; rant&gt; PHP的不足之处的许多例子之一,这就是为什么我几乎完全从PHP到使用它除了回答堆栈溢出问题之外:)只需切换到Ruby,一切都会很好:)&lt ; /咆哮&GT;