(我的环境是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()的区别相关推荐

  1. php _initialize __construct,Thinkphp5 _initialize() 和 _construct() 中无法Return

    事情的起因是这样的,我在写接口的时候,也想和后台一样先判断用户是否登录,如果登录才能操作,可是其他控制器继承公共控制器之后没有反映.之后我查阅了半会资料才搞明白是怎么回事. #### __initia ...

  2. ThinkPHP 中M方法和D方法的具体区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  3. Thinkphp框架中D()和M()的区别

    ThinkPHP中实例化对象M()和D()的区别?ThinkPHP如何实例化对象? 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D ...

  4. ThinkPHP中的find和select的区别

    ThinkPHP作为PHP中应用广泛又好用的框架,能比较快速的开发MVC架构的管理系统,获得了大量的应用.但是在ThinkPHP中select()和find()方法有什么区别呢? 事实上find()返 ...

  5. php tp写构造函数,详细介绍ThinkPHP中类的构造函数_construct()与_initialize()的区别

    这篇文章主要介绍了ThinkPHP中类的构造函数_construct()与_initialize()的区别,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧. 前言 相信 ...

  6. php大m大d,ThinkPHP中M方法与D方法区别

    [前言] ? ? ? 本文总结下ThinkPHP中M方法与D方法区别,以下均为个人见解.如有误解请指正 ? [主体] (一)个人见解: ? ? ? ?M()方法参数可选,有参数时表示实例化父类模型的同 ...

  7. php $this self,php中self与$this的区别

    学习php中self与$this的区别. 先来看下parent与self的例子: /* * parent与self的区别 * by www.jbxue.com */ class A{ function ...

  8. PHP中this,self,parent的区别

    {一}PHP中this,self,parent的区别之一this篇 面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能.利用OOP的思想进行P ...

  9. php行为和事件是什么,Yii Framework框架中事件和行为的区别及应用实例分析

    本文实例讲述了Yii Framework框架中事件和行为的区别及应用.分享给大家供大家参考,具体如下: 个人觉得,在 Yii 里面,最难以明白的就是事件(Event)和行为(behavior)了.这不 ...

最新文章

  1. SmartRules让MindManager的交互图变得更加智能
  2. iOS 组件化 —— 路由设计思路分析
  3. Hash特征编码在推荐系统的应用
  4. win7 64位数据库连接问题:在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
  5. 机器学习中树模型算法总结之 决策树(上)
  6. 面向项目(一) —— 代码编写
  7. LUOGU P4281 [AHOI2008]紧急集合 / 聚会 (lca)
  8. maven依赖不到想要的jar包问题
  9. 10负3次方计算机语言,10的负3次方等于多少?
  10. 群晖室开虚拟机安装于服务器,VMware Workstation安装群晖服务器
  11. latex----目录格式设置
  12. html多重阴影,求问:CSS3多重阴影效果实现的问题。为什么没有任何的效果,怎么改颜色都没用。...
  13. 模板学堂丨JumpServer安全运维审计大屏
  14. 通过关键词获取微博内容
  15. ios云信不能全屏_ios集成网易云信IM功能遇到的坑
  16. MySQL数据库(1)~~一起学习数据库冲冲冲
  17. 好好说话之Tcache Attack(3):tcache stashing unlink attack
  18. 完美融入云原生的无代码平台 iVX编辑器介绍
  19. BUAA-2023软件工程——团队成员介绍
  20. C语言字符串的组包解包

热门文章

  1. 原生JS封装时间运动函数
  2. C++ smart pointer
  3. 你绝对想不到R文件找不到(cannot resolve symbol R)的原因
  4. Linux 下配置 phpredis 的过程和遇到的问题
  5. 多线程环境下调用 HttpWebRequest 并发连接限制
  6. Mac 开发中如何设置 关闭 以及最小化 最大化按钮事件处理
  7. 3D空间的指定起点和终点的抛体运动
  8. 以太坊测试链环境node.js版本
  9. Windows Containers 大冒险: 加速
  10. 项目信息追踪(Log)