热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ThinkPHP__initialize()和类的构造函数__construct()剖析

ThinkPHP中的__initialize()和类的构造函数__construct(),thinkphp中的__construct是不可以随便用的,因为你的模块类继承上级类,上级类有定义好的;1、__initialize()不是php类中的函数,php类的构造函数.

ThinkPHP中的__initialize()和类的构造函数__construct()

thinkphp中的__construct是不可以随便用的,因为你的模块类继承上级类,上级类有定义好的;

1、__initialize()不是php类中的函数,php类的构造函数只有__construct().

2、类的初始化:子类如果有自己的构造函数(__construct()),则调用自己的进行初始化,如果没有,则调用父类的构造函数进行自己的初始化。

3、当子类和父类都有__construct()函数的时候,如果要在初始化子类的时候同时调用父类的__constrcut(),则可以在子类中使用parent::__construct().

如果我们写两个类,如下:

  1. class Action{ 
  2.     public function __construct() 
  3.     { 
  4.         echo 'hello Action'
  5.     } 
  6. class IndexAction extends Action{ 
  7.     public function __construct() 
  8.     { 
  9.         echo 'hello IndexAction'
  10.     } 
  11. $test = new IndexAction; 
  12. //output --- hello IndexAction 

很明显初始化子类IndexAction的时候会调用自己的构造器,所以输出是'hello IndexAction',但是将子类修改为:

  1. class IndexAction extends Action{ 
  2.     public function __initialize() 
  3.     { 
  4.         echo 'hello IndexAction'
  5.     } 

那么输出的是'hello Action',因为子类IndexAction没有自己的构造器,如果我想在初始化子类的时候,同时调用父类的构造器呢?

  1. class IndexAction extends Action{ 
  2.     public function __construct() 
  3.     { 
  4.         parent::__construct(); 
  5.         echo 'hello IndexAction'
  6.     } 

这样就可以将两句话同时输出,当然还有一种办法就是在父类中调用子类的方法.

  1. class Action{ 
  2.     public function __construct() 
  3.     { 
  4.         if(method_exists($this,'hello')) 
  5.         { 
  6.             $this -> hello(); 
  7.         } 
  8.         echo 'hello Action'
  9.     } 
  10. class IndexAction extends Action{ 
  11.     public function hello() 
  12.     { 
  13.         echo 'hello IndexAction'
  14.     } 

这样也可以将两句话同时输出,而这里子类中的方法hello()就类似于ThinkPHP中__initialize()。

所以,ThinkPHP中的__initialize()的出现只是方便程序员在写子类的时候避免频繁的使用parent::__construct(),同时正确的调用框架内父类的构造器,所以,我们在ThnikPHP中初始化子类的时候要用__initialize(),而不用__construct(),当然你也可以通过修改框架将__initialize()函数修改为你喜欢的函数名.


推荐阅读
  • Java中的基本数据类型与包装类解析
    本文探讨了Java编程语言中的8种基本数据类型及其对应的包装类。通过分析这些数据类型的特性和使用场景,以及自动拆装箱机制的实现原理,帮助开发者更好地理解和应用这些概念。 ... [详细]
  • 本文详细介绍了在XAMPP环境中如何修改Apache和MySQL的默认端口号,并确保WordPress能够正常访问。同时,提供了针对Go语言社区和Golang开发者的相关建议。 ... [详细]
  • Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
    本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • HTML基础入门指南
    本文将深入浅出地介绍HTML的基础知识,包括其定义、开发工具、制定机构、特性、基本标签及更多实用内容。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 2004年春节,作者与父亲讨论了未来的职业规划,并决定尝试创业开设家教培训班。然而,创业过程中的种种困难和挑战最终导致了项目的失败。 ... [详细]
  • 设计模式在软件开发中被广泛应用,但如果不当使用,可能会导致系统复杂性增加。例如,过度添加类可能导致类图难以理解,代码跟踪变得复杂。本文探讨如何在使用设计模式时保持系统的简洁和高效。 ... [详细]
  • Go语言实现经典排序算法:归并排序
    本文介绍如何使用Go语言实现经典的归并排序算法,探讨其原理、代码实现及性能特点。适合Golang开发者和编程爱好者。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • 程序员如何优雅应对35岁职业转型?这里有深度解析
    本文探讨了程序员在职业生涯中如何通过不断学习和技能提升,优雅地应对35岁左右的职业转型挑战。我们将深入分析当前热门技术趋势,并提供实用的学习路径。 ... [详细]
  • 程序员版情书:王思聪的编程式告白
    当程序员用代码表达爱意,会产生怎样的化学反应?一起来看看这封充满技术感的情书,网友笑称这才是真爱! ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
author-avatar
迈迈最love
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有