在php中,子类extends继承了父类,当子类和父类同时存在构造函数__construct先执行哪一个呢?

在php中,子类extends继承了父类,当子类和父类同时存在构造函数__construct先执行哪子类的构造函数还是父类的构造函数呢?还有一个问题就是:子类既然已经继承... 在php中,子类extends继承了父类,当子类和父类同时存在构造函数__construct先执行哪子类的构造函数还是父类的构造函数呢?
还有一个问题就是:子类既然已经继承了父类,那么为什么还要用parent::__construct来调用父类的 构造函数呢?
我的意思是既然子类继承了父类,那么久没有必要再去用parent::__construct调用了
展开
 我来答
娱乐小八卦啊a
高粉答主

2019-09-23 · 娱乐小八卦,天天都知道
娱乐小八卦啊a
采纳数:256 获赞数:117860

向TA提问 私信TA
展开全部

1、如果父类和子类中都没有显式的定义__construct,在实例化子类对象时,只会隐含的调用子类自己的构造方法。

2、如果父类中有显式的构造方法__construct,而子类中没有定义__construct,在实例化子类对象时,就会调用父类中的构造方法。

3、如果父类和子类中都显式的定义了__construct,在实例化子类对象时,只会调用子类自己的构造方法(这就像是子类重构了父类的构造方法),而如果也想要调用父类的构造方法的话,就需要在子类的__construct 方法中显式的调用,(如 __construct(){ parent::_construct();})。


扩展资料

子类的构造函数名与子类名相同。

在子类里父类的构造函数不会自动执行。

要在子类里执行父类的构造函数,必须执行类似以下语句:

$this->[父类的构造函数名()]

类的构造函数统一命名为__construct()。

子类的构造函数名也是__construct()(也是废话)。

在子类里父类的构造函数会不会执行,分两种情况:

1、如子类不定义构造函数 __construct(),则父类的构造函数默认会被继承下来,且会自动执行。

2、如子类定义了构造函数 __construct(),因为构造函数名也是__construct(),所以子类的构造函数实际上是覆盖(override)了父类的构造函数。这时执行的是该子类的构造函数。

这时如果要在子类里执行父类的构造函数,必须执行类似以下语句:parent::__construct();

参考资料来源:

百度百科——继承

simple丶魂
推荐于2017-11-21 · TA获得超过1294个赞
知道小有建树答主
回答量:511
采纳率:0%
帮助的人:293万
展开全部
PHP5.0 以上版本对类的功能进行了很大的扩充。类的构造函数统一命名为__construct()。
子类的构造函数名也是__construct()(也是废话)。
在子类里父类的构造函数会不会执行,分两种情况:
1,如子类不定义构造函数 __construct(),则父类的构造函数默认会被继承下来,且会自动执行。
2,如子类定义了构造函数 __construct(),因为构造函数名也是__construct(),所以子类的构造函数实际上是覆盖(override)了父类的构造函数。这时执行的是该子类的构造函数。
所以子类在继承父类后,会拥有父类的属性和方法,这是继承的特性。子类在构造函数会首先调用父类的构造函数来实例化父类的属性,然后调用子类的构造函数,一般你不写,并不表示没有调用,而是首先调用了父类的无参构造函数,如果父类的某些属性需要在父类构造函数中特殊实例化,则你必须显示的调用父类的有参构造函数,这样保证子类属性的完整性。
追问
大师,
子类的构造函数覆盖了父类的构造函数,那么父类的__construct()被覆盖了应该不存在呢。然后parent::__construct怎么又可以调用呢
追答
当子类写了构造函数,那么子类的构造函数就会覆盖父类的构造函数。如果子类没有写构造函数,而是parent::__construct这样的话只会继承父类的,而不会覆盖父类。
如果是想既继承父类的构造函数又想写自己的构造函数,那么就用parent::__construct,如果不想继承父类的构造函数,那就子类重新定义一个构造函数吧。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fange605
2019-06-23
知道答主
回答量:1
采纳率:0%
帮助的人:732
展开全部
只需要理解 覆盖并非真正的覆盖 父类的构造函数还是存在的,只是不能自动调用而已。所以必须在子类构造函数声明才能调用父类的构造函数。继承相当于copy了一份 不会真正改变父类的代码。要不然多个子类继承同一个父类,不是就乱套了吗。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式