摘要:方法是在任何方法执行之前,都要执行的,当然也包括构造函数。也就是说如果存在函数,调用对象的任何方法都会导致函数的自动调用而构造函数仅仅在创建对象的时候调用一次,跟其它方法调用没有关系。默认情况下,子类的构造函数不会自动调用父类的构造函数。
_initialize()方法是在任何方法执行之前,都要执行的,当然也包括 __construct构造函数。 也就是说如果存在_initialize()函数,调用对象的任何方法都会导致_initialize()函数的自动调用,而__construct()构造函数仅仅在创建对象的时候调用一次,跟其它方法调用没有关系。
__construct这里是双划线,而_initialize()函数是单划线
如果父子类均有_initialize()函数,则子类覆盖了父类的,如果子类没有而父类有,则子类继承父类的。
默认情况下,子类的构造函数不会自动调用父类的构造函数。在调用子类对象的_initialize()时,也不会导致自动调用父类的_initialize()
实际编写子类的构造函数时,一般都要加上父类构造函数的主动调用parent::__construct(),否则会导致子类对象空指针的异常,如Call to a member function assign() on a non-object。
故在一些系统后台管理或者评论功能上,可使相关的控制器extends于base控制器:
Base.php:
error("请先登录系统!","Login/index"); } } }
Article.php
这样一来,当Article控制器的任何方法执行前都会先执行Base.php中的_initialize()方法进行检测是否已经登录,无需创建对象。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/29257.html
摘要:函数的出现是为了我们可以在子类中同时调用父类与子类的构造函数。而在父类经过特别处理后,本身就就可以完成这个功能了,其实我认为的函数本意就是用来在需要同时调用父类与子类构造函数时用的。 最近在学习ThinkPHP框架,看到_initialize()函数,也正好做个小总结 简单看了谷歌,百度上的教程,感觉噼里啪啦说了好多,全在进行测试,都没说到点子上~ 实验版本:ThinkPHP 3.2....
摘要:延伸如果子类继承了父类后,重写了构造方法,注意调用父类的哦,否则是使用不了的,代码如下其他代码总结一个简单的小设计,这里抛砖引玉的分析下,希望对大家有帮助。 前言 _initialize() 这个方法在官方手册里是这样说的: 如果你的控制器类继承了 hinkController类的话,可以定义控制器初始化方法_initialize,在该控制器的方法调用之前首先执行。 其实不止5,在之前...
摘要:以上是服务启动过程中的主体设计,其中包括了各种组件的实例化,如对象池等。 EasySwoole 服务启动过程以及主体设计流程源码解析 本文主要讲解EasySwoole 服务的启动过程,会通过源码片段讲解主体的设计流程 命令启动 当我们通过php easyswoole start启动EasySwoole 服务时,命令真正到达的文件是 easyswoole项目vendoreasyswool...
摘要:有了的静态延迟绑定功能,可以在运行时动态确定归属的类。与是被讨论最多,也是最容易引起误用的组合。的用途看完与上述三个关键字的区别,的用途是不是呼之即出一句话总结,那就是总是指向当前类及类实例。 转载请注明文章出处:https://tlanyan.me/self-in-php/ PHP群里有人询问self关键字的用法,答案是比较明显的:静态成员函数内不能用this调用非成员函数,但可以用...
阅读 3149·2021-11-25 09:43
阅读 3188·2021-11-23 09:51
阅读 3500·2019-08-30 13:08
阅读 1506·2019-08-29 12:48
阅读 3575·2019-08-29 12:26
阅读 378·2019-08-28 18:16
阅读 2543·2019-08-26 13:45
阅读 2396·2019-08-26 12:15