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验证码(支持中文)
Feb 14 PHP
php中计算程序运行时间的类代码
Nov 03 PHP
Memcached常用命令以及使用说明详解
Jun 27 PHP
php过滤XSS攻击的函数
Nov 12 PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
Mar 19 PHP
PHP类的封装与继承详解
Sep 29 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
Apr 11 PHP
php反射学习之不用new方法实例化类操作示例
Jun 14 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
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
简单了解什么是神经网络
2017/12/23 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
详解python中sort排序使用
2019/03/23 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
node中使用shell脚本的方法步骤
2021/03/23 Javascript
化工专业个人的求职信范文
2013/11/28 职场文书
教师岗位职责范本
2013/12/29 职场文书
承办会议欢迎词
2014/01/17 职场文书
公司担保书格式范文
2014/05/12 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
分家协议书范本
2016/03/22 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS