thinkphp中__construct与_initialize()的区别
(我的环境是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构造函数(这个本人亲测,上述代码没有)。
本文摘自:http://www.cnblogs.com/zyp-itlife/p/5880733.html
转载于:https://www.cnblogs.com/jiafeimao-dabai/p/7423016.html
thinkphp中__construct与_initialize()的区别相关推荐
- php _initialize __construct,Thinkphp5 _initialize() 和 _construct() 中无法Return
事情的起因是这样的,我在写接口的时候,也想和后台一样先判断用户是否登录,如果登录才能操作,可是其他控制器继承公共控制器之后没有反映.之后我查阅了半会资料才搞明白是怎么回事. #### __initia ...
- ThinkPHP 中M方法和D方法的具体区别
M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...
- Thinkphp框架中D()和M()的区别
ThinkPHP中实例化对象M()和D()的区别?ThinkPHP如何实例化对象? 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D ...
- ThinkPHP中的find和select的区别
ThinkPHP作为PHP中应用广泛又好用的框架,能比较快速的开发MVC架构的管理系统,获得了大量的应用.但是在ThinkPHP中select()和find()方法有什么区别呢? 事实上find()返 ...
- php tp写构造函数,详细介绍ThinkPHP中类的构造函数_construct()与_initialize()的区别
这篇文章主要介绍了ThinkPHP中类的构造函数_construct()与_initialize()的区别,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧. 前言 相信 ...
- php大m大d,ThinkPHP中M方法与D方法区别
[前言] ? ? ? 本文总结下ThinkPHP中M方法与D方法区别,以下均为个人见解.如有误解请指正 ? [主体] (一)个人见解: ? ? ? ?M()方法参数可选,有参数时表示实例化父类模型的同 ...
- php $this self,php中self与$this的区别
学习php中self与$this的区别. 先来看下parent与self的例子: /* * parent与self的区别 * by www.jbxue.com */ class A{ function ...
- PHP中this,self,parent的区别
{一}PHP中this,self,parent的区别之一this篇 面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能.利用OOP的思想进行P ...
- php行为和事件是什么,Yii Framework框架中事件和行为的区别及应用实例分析
本文实例讲述了Yii Framework框架中事件和行为的区别及应用.分享给大家供大家参考,具体如下: 个人觉得,在 Yii 里面,最难以明白的就是事件(Event)和行为(behavior)了.这不 ...
最新文章
- SmartRules让MindManager的交互图变得更加智能
- iOS 组件化 —— 路由设计思路分析
- Hash特征编码在推荐系统的应用
- win7 64位数据库连接问题:在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
- 机器学习中树模型算法总结之 决策树(上)
- 面向项目(一) —— 代码编写
- LUOGU P4281 [AHOI2008]紧急集合 / 聚会 (lca)
- maven依赖不到想要的jar包问题
- 10负3次方计算机语言,10的负3次方等于多少?
- 群晖室开虚拟机安装于服务器,VMware Workstation安装群晖服务器
- latex----目录格式设置
- html多重阴影,求问:CSS3多重阴影效果实现的问题。为什么没有任何的效果,怎么改颜色都没用。...
- 模板学堂丨JumpServer安全运维审计大屏
- 通过关键词获取微博内容
- ios云信不能全屏_ios集成网易云信IM功能遇到的坑
- MySQL数据库(1)~~一起学习数据库冲冲冲
- 好好说话之Tcache Attack(3):tcache stashing unlink attack
- 完美融入云原生的无代码平台 iVX编辑器介绍
- BUAA-2023软件工程——团队成员介绍
- C语言字符串的组包解包