php7中的构造函数详解
程序员文章站
2022-05-06 14:49:55
...
在用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中的构造函数详解的详细内容,更多请关注其它相关文章!
下一篇: crm系统统计表的设计问题