Php间接继承?

时间:2014-03-19 22:55:13

标签: php inheritance

<?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类继承

1 个答案:

答案 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;