php不调用父类构造_PHP 实例化子类为何不自动调用父类的构造方法?

旧城等待, 2023-01-10 05:24 82阅读 0赞

刚从一个相关问题的坑里走出来,搜到这个问题,试着答一波,如有偏颇,还请高人指点

先说句废话:两种设计肯定都没错,各有优缺。

那么这个问题就转化为了两种设计的优缺点分别是什么?

java:

先说同一个类多构造函数之间overload,这个本来就是应对进入到方法的时候,参数不一样的情形的,即为横向扩展。那这里最少的情况就是默认的,无参的。那其他overload出来的,肯定想基于这个最基础的进行扩展。所以就一般都会手动调用下无参的构造函数。

再说父子之间构造函数的override,这个是用来应对,进入到方法之后方法内部逻辑不同的情形的,相对父类这是纵向扩展。

不管是横向扩展还是纵向扩展,既然是扩展都有个最简单的起点,那无疑是父类无参构造函数。

php:

横向:不好意思,简单点,我没有overload,我一个方法你随便调用,想支持不同参数不同逻辑,找魔术方法去。

纵向:不好意思,我子类看不上你父类的东西,我自己清清楚楚搞一份,你别管我。

总结:

java子类:自动继承父类最基础的操作,达到代码复用,更严格。

php子类:你别管我,我想用自己会调,不要给我隐含语义,有啥想弄得,写出来有多麻烦。

个人觉得还是php的设计,更灵活,你说网络检查等通用操作,父类写一遍就行了,如果都搞成java那样,万一有个子类不想检查,那岂不是犯难,如果这个类还是第三方库里面的,那你就稍微要再麻烦点了。放到PHP这,我不想检查就不调用呗,其他的兄弟类想用的,辛苦下,多写一句parent::__construct,岂不是更清晰明确。

发表评论

表情:
评论列表 (有 0 条评论,82人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java调用构造方法

    在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?    答案如下:     当你new一个