php不调用父类构造_PHP 实例化子类为何不自动调用父类的构造方法?
刚从一个相关问题的坑里走出来,搜到这个问题,试着答一波,如有偏颇,还请高人指点
先说句废话:两种设计肯定都没错,各有优缺。
那么这个问题就转化为了两种设计的优缺点分别是什么?
java:
先说同一个类多构造函数之间overload,这个本来就是应对进入到方法的时候,参数不一样的情形的,即为横向扩展。那这里最少的情况就是默认的,无参的。那其他overload出来的,肯定想基于这个最基础的进行扩展。所以就一般都会手动调用下无参的构造函数。
再说父子之间构造函数的override,这个是用来应对,进入到方法之后方法内部逻辑不同的情形的,相对父类这是纵向扩展。
不管是横向扩展还是纵向扩展,既然是扩展都有个最简单的起点,那无疑是父类无参构造函数。
php:
横向:不好意思,简单点,我没有overload,我一个方法你随便调用,想支持不同参数不同逻辑,找魔术方法去。
纵向:不好意思,我子类看不上你父类的东西,我自己清清楚楚搞一份,你别管我。
总结:
java子类:自动继承父类最基础的操作,达到代码复用,更严格。
php子类:你别管我,我想用自己会调,不要给我隐含语义,有啥想弄得,写出来有多麻烦。
个人觉得还是php的设计,更灵活,你说网络检查等通用操作,父类写一遍就行了,如果都搞成java那样,万一有个子类不想检查,那岂不是犯难,如果这个类还是第三方库里面的,那你就稍微要再麻烦点了。放到PHP这,我不想检查就不调用呗,其他的兄弟类想用的,辛苦下,多写一句parent::__construct,岂不是更清晰明确。
还没有评论,来说两句吧...