一起源码网

  • www.171739.xyz
  • 全球最大的互联网技术和资源下载平台
搜索
猜你喜欢
查看: 4177|回复: 1
打印 上一主题 下一主题

php7中的构造函数详解

[复制链接]

0

主题

0

帖子

1万

积分

钻石会员

Rank: 8Rank: 8

积分
17424
QQ
跳转到指定楼层
楼主
发表于 2020-3-17 03:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在用php7进行开发的时候,遇到了:

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; index has a deprecated constructor

这个提示本来很正常,看起来也很容易理解,而且很多介绍php7的文章中都有提到过,那就是php7中与类同名的作为的时候会抛出这个提示,推荐使用contruct作为构造函数,像ecshop之类的代码就有很多用与类同名的函数作构造函数的情况。

但我发现thinkphp的中仍然有index控制器中存在index方法的情况,使用的时候并没有发现会抛出这个提示来。

于是去翻代码,但资料,测试,发现有这么几种情况:

1.一个类中如果同时存在construct(非父类的)和与类名同名函数,则construct是构造函数,而同名函数则当作普通函数;

2.如果一个子类的父类中有construct(即使是public)但子类中没有,而子类中有同名函数,而同名函数是构造函数。如果你用get_class_methods($this);获取类的方法会发现其实是有construct方法的;

3.php官方手册中有这么一句话:

自 PHP 5.3.3 起,在中,与类名同名的方法不再作为构造函数。这一改变不影响不在命名空间中的类

测试一些猜想的时候一般不会去使用命名空间,看thinkphp的源码也没有哪里有作什么特殊处理,一直停留在前两种情况,很是不解。

还好在php官方手册中找到了第三种情况,也终于理解了为什么在thinkphp中没有那个提示,因为thinkphp使用了命名空间。

分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

0

主题

26

帖子

94

积分

注册会员

Rank: 2

积分
94
沙发
发表于 2022-9-8 09:24 | 只看该作者
类似源代码的电影
回复

使用道具 举报

一起源码让程序更轻更快

www.171739.xyz

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表