我没有问一个典型的问题,为什么有些代码失败了,但我问的是为什么它有效.它在编码时与我合作,我需要它失败.
案件
子类使用受保护的构造函数扩展相同的抽象类
abstract class BaseClass {
abstract protected function __construct();
}
class ChildClass extends BaseClass {
protected function __construct(){
echo 'It works';
}
}
class ParentClass extends BaseClass {
public function __construct() {
new ChildClass();
}
}
// $obj = new ChildClass(); // Will result in fatal error. Expected!
$obj = new ParentClass(); // that works!!WHY?
Run Code Online (Sandbox Code Playgroud)题
父类实例化子类对象,它的工作原理!! 怎么会这样呢?据我所知,如果对象的构造函数声明为protected,则无法实例化对象,除了内部或通过继承从任何子类内部.
父类不是子类的子类,它不从它继承一角钱(但都扩展了相同的基本抽象类),那么如何实例化不会失败?
编辑
这种情况只发生在一个抽象的BaseClass上,它也有一个抽象的构造函数.如果BaseClass是concerete,或者如果它的受保护的构造函数不是抽象的,那么实例化会按预期失败..这是一个PHP错误吗? 为了我的理智,我需要解释为什么PHP在这种非常具体的情况下以这种方式运行.
提前致谢
我使用LAMP Stack开发了近6年的Web应用程序,最近我一直在使用ZEND Framework.
它有一个陡峭的学习曲线,它花了我一段时间,直到我弄清楚它的输入/输出和MVC结构背后的逻辑.
我选择ZF虽然它比许多其他PHP框架更复杂,因为它可能会存活更长时间.
目前,我打算学习Java J2EE
试图广泛地使用ZEND Framework投入我以前的知识,所以我真的需要知道它的J2EE框架的等价物
并且,我并不知道晦涩的框架,或者没有机构使用的框架,只有大师,或内部人员为解决他们自己的问题而创建的框架,或者刚刚诞生的框架,或者没有庞大的框架开发人员基础,或年轻的酷框架,需要多年才能保持稳定.
我需要知道众所周知的用于为企业创建应用程序的框架,这些框架至少在未来20年内不会消亡,希望如此.
为了稳定和职业发展,我牺牲了简单性.我打算学习一个框架,只有一个框架,我将坚持终身.
Botton Line:我想学习这个框架,它可以存活很长时间,积极竞争,定期更新,这使我无需每年学习新的框架和全新的API.
如果可能的话,我需要完整的细节,以及经验丰富的程序员的真实指导,他们已经看到了这一切并且非常了解它.
谢谢大家.