欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php7中的构造函数详解

程序员文章站 2022-04-06 19:45:37
...
在用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中的构造函数详解的详细内容,更多请关注其它相关文章!

相关标签: php7 php 详解