小编Ahm*_*ouk的帖子

PHP - 对象实例化上下文 - 奇怪的行为 - 这是PHP错误吗?

我没有问一个典型的问题,为什么有些代码失败了,但我问的是为什么它有效.它在编码时与我合作,我需要它失败.

案件

  • 一个基本抽象类,其受保护的构造函数声明为abstract
  • 父类使用公共构造函数扩展抽象类(Over ridding)
  • 子类使用受保护的构造函数扩展相同的抽象类

      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在这种非常具体的情况下以这种方式运行.

提前致谢

php inheritance class object instantiation

6
推荐指数
1
解决办法
520
查看次数

什么是Java世界中PHP Zend Framework的等效内容

我使用LAMP Stack开发了近6年的Web应用程序,最近我一直在使用ZEND Framework.

它有一个陡峭的学习曲线,它花了我一段时间,直到我弄清楚它的输入/输出和MVC结构背后的逻辑.

我选择ZF虽然它比许多其他PHP框架更复杂,因为它可能会存活更长时间.

目前,我打算学习Java J2EE

试图广泛地使用ZEND Framework投入我以前的知识,所以我真的需要知道它的J2EE框架的等价物

并且,我并不知道晦涩的框架,或者没有机构使用的框架,只有大师,或内部人员为解决他们自己的问题而创建的框架,或者刚刚诞生的框架,或者没有庞大的框架开发人员基础,或年轻的酷框架,需要多年才能保持稳定.

我需要知道众所周知的用于为企业创建应用程序的框架,这些框架至少在未来20年内不会消亡,希望如此.

为了稳定和职业发展,我牺牲了简单性.我打算学习一个框架,只有一个框架,我将坚持终身.

Botton Line:我想学习这个框架,它可以存活很长时间,积极竞争,定期更新,这使我无需每年学习新的框架和全新的API.

如果可能的话,我需要完整的细节,以及经验丰富的程序员的真实指导,他们已经看到了这一切并且非常了解它.

谢谢大家.

php java zend-framework java-ee

5
推荐指数
1
解决办法
2266
查看次数