php7中的构造函数详解

黄舟
发布: 2023-03-12 10:18:01
原创
4004 人浏览过

在用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使用了命名空间。

以上是php7中的构造函数详解的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!