ThinkPHP中类的构造函数_construct()与_initialize()的区别详解


Posted in PHP onMarch 13, 2017

前言

相信熟悉THINKPHP的phper基本上都很熟悉_initialize()这个方法,我们似乎也很少去使用_construct() ,除非自己写插件,否则还真是很少用到。

今天查看代码突然看到_construct()这个php自带的构造方法,我的第一感觉是比较陌生,虽然之前学习java时经常遇到,但是很久不用基本忘记。我平时的习惯是将知识的重点写

在我那本小笔记上,但是很久不写字,曾经高中那个那种飘逸灵动的书写笔法彻底丢到异次元。再加上之前的想法,所以就来学习学习技术大牛们写写博客,这不是为了装逼,而只是让自己工作成果的点点滴滴都能不随时间流逝而消散。下面来看看详细的介绍吧。

先贴上代码(我的环境是wamp,使用了TP框架):

创建的FatherAction.class.php文件

<?php


class FatherAction extends Action{
public function __construct(){
echo 'father';
}
}

?>

创建的SonAction.class.php文件

<?php


class SonAction extends FatherAction{
public function __construct(){
echo 'son';
}
function index(){

}
}

?>

运行子类SonAction里的index()可以看到输出的结果:

son

如果将子类改为:

<?php


class SonAction extends FatherAction{
 public function __construct(){
parent::__construct();
echo 'son';
 }
function index(){

}
}

?>

运行结果为;

fatherson

上面的结果可以得出结论:

在执行子类的构造函数时并不会自动调用父类的构造函数,如果你要调用的话,那么要加上parent::__construct()

当我们把上述的构造方法改为THINKPHP_initialize()方法时运行会发现:结果与前面的一致,若要执行父类的_initialize()方法,也需要使用这一句:parent::_initialize()

那是不是说明php自带的构造函数__construct()与THINKPHP的_initialize()方法一样的呢?

先贴上两段代码:

<?php


class FatherAction extends Action{
public function __construct(){
echo 'father';
}
}

?>
<?php


class SonAction extends FatherAction{
public function _initialize(){
echo 'son';
}


function index(){

}

}

?>

当执行子类SonAction的index方法时发现,输出的结果为:father

即子类调用了父类的构造函数,而没有调用子类的_initialize()方法

再贴上两段代码:

<?php


class FatherAction extends Action{
public function __construct(){
if(method_exists($this,"hello")){
$this->hello();
}
echo 'father';
}
}

?>
<?php


class SonAction extends FatherAction{
public function _initialize(){
echo 'son';
}
function index(){

}

function hello(){
echo 'hello';
}
}

?>

执行子类SonAction的index方法,发现输入的结果为hellofather

由此可以得出结论:

当THINKPHP的父类有构造函数而子类没有时,THINKPHP不会去执行子类的_initialize()

当THINKPHP的父类子类均有构造函数时,要调用父类的构造函数必须使用parent::__construct() ----------------- _initialize()同理;

当THINKPHP的子类同时存在__construct构造函数和_initialize()方法,只会执行子类的__construct构造函数(这个本人亲测,上述代码没有)。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php microtime获取浮点的时间戳
Feb 21 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
Jun 17 PHP
php二维数组转成字符串示例
Feb 17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
Jun 24 PHP
PHP实现抓取HTTPS内容
Dec 01 PHP
PHP 验证登陆类分享
Mar 13 PHP
php实现阳历阴历互转的方法
Oct 28 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
Mar 23 PHP
PHP编写daemon process 实例详解
Nov 13 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
Sep 30 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
Mar 13 #PHP
php解析mht文件转换成html的实例
Mar 13 #PHP
使用phpQuery获取数组的实例
Mar 13 #PHP
php获取linux命令结果的实例
Mar 13 #PHP
老生常谈PHP位运算的用途
Mar 12 #PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 #PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 #PHP
You might like
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
2015/04/10 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
python文件比较示例分享
2014/01/10 Python
用python删除java文件头上版权信息的方法
2014/07/31 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
使用pandas读取文件的实现
2019/07/31 Python
Python中关于浮点数的冷知识
2019/09/22 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
Internet体系结构
2014/12/21 面试题
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
正隆泰信息技术有限公司上机题
2012/06/14 面试题
计算机操作自荐信
2013/12/07 职场文书
小区推广策划方案
2014/06/06 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
2015年小学数学教师工作总结
2015/05/20 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书