ThinkPHP中的__initialize()和类的构造函数__construct()
网上有很多关于__initialize()的说法和用法,总感觉不对头,所以自己测试了一下。将结果和大家分享。不对请更正。
首先,我要说的是
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. }
  7. class IndexAction extends Action{
  8. public function __construct()
  9. {
  10. echo 'hello IndexAction';
  11. }
  12. }
  13. $test = new IndexAction;
  14. //output --- hello IndexAction
复制代码

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

  1. class IndexAction extends Action{
  2. public function __initialize()
  3. {
  4. echo 'hello IndexAction';
  5. }
  6. }
复制代码

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

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

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

  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. }
  11. class IndexAction extends Action{
  12. public function hello()
  13. {
  14. echo 'hello IndexAction';
  15. }
  16. }
复制代码

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

http://www.thinkphp.cn/code/367.html

转载于:https://www.cnblogs.com/guke/p/3915266.html

__construct()和__initialize()相关推荐

  1. ThinkPHP之__construct()和__initialize()

    ThinkPHP中的__initialize()和类的构造函数__construct() 网上有很多关于__initialize()的说法和用法,总感觉不对头,所以自己测试了一下.将结果和大家分享.不 ...

  2. php的封装construct构造方法,__construct() 构造函数

    1.构造函数实例化类的时候会自动调用, 2.子类没有构造函数,会直接调用父类的构造涵数, 继承父类的属性和方法 3.子类和父类都有构造函数,实例子类时不会自动调用父类构造函数,只会调用子类自己的构造函 ...

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

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

  4. 009-对象—— 构造方法__construct析构方法__destruct使用方法 PHP重写与重载

    <?php /**构造方法__construct析构方法__destruct使用方法 PHP重写与重载*/ //构造方法:当实例化对象时,自动运行的方法 /*class channel{func ...

  5. Php魔术函数学习与应用 __construct() __destruct() __get()等

    (1)初识魔术方法 Php5.0发布以来为我们提供了很多面向对象 的特性,尤其是为我们提供了好多易用的魔术方法,这些魔术方法可以让我们简化我们的编码,更好的设计我们的系统.今天我们就来认识下php5. ...

  6. thinkphp中__construct与_initialize()的区别

    (我的环境是wamp,使用了TP框架): 创建的FatherAction.class.php文件 <?php class FatherAction extends Action{ public ...

  7. PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __uns

    1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的 __get( $property ) 当调用一个未定义的属性时访问此方法 __set( $property, $va ...

  8. php 保护连接字符串,PHP OOP更新扩展类__construct上的受保护字符串

    我正在尝试创建我的第一个PHP类,并一直坚持如何更新受保护的字符串. 我要做的是创建一个扩展类,使用主类中受保护的字符串. 我可以在第一个类加载时更新字符串,但是当我加载扩展类时,它不会显示更新的文本 ...

  9. laravel5.5 __construct函数 无法使用session() 解决方法和实例

    laravel5.5 __construct函数 无法使用session() 解决方法和实例 参考文章: (1)laravel5.5 __construct函数 无法使用session() 解决方法和 ...

最新文章

  1. Intel主动管理技术用例-远程诊断、远程修复
  2. 咨询的真相8:咨询业的“前世今生”
  3. 用原生PHP做Blog系统-Day01
  4. r语言ggplot2一夜多图_ggplot2绘图:多张图合并为一张
  5. ACL20 Best Paper揭晓!NLP模型评价体系或将迎来重大转折
  6. 计算与推断思维 十二、为什么均值重要
  7. linux怎么添加ubuntu源,细说 Ubuntu Linux 软件源
  8. Delphi 7生成XML
  9. 实人认证玩出新高度,给千年老城注入新生科技力量
  10. 一张图教你清理IE浏览器缓存
  11. 几种segue的使用场景
  12. Arcgis10.8中将三维的高程点转换为二维的高程点
  13. 如何实现广告图片总是显示在页面上方,并且随滚动条同步移动?
  14. 三重积分平均值_有关研究生考试中高等数学 分级中 “数农”是什么意思?
  15. hbase2.1.6 mr
  16. 全新数据增强 | TransMix 超越Mix-up、Cut-mix方法让模型更加鲁棒、精度更高
  17. 阿里云服务器10M带宽实际速度能达到多少?
  18. SourceInsight4.0自定义编译命令
  19. 新零售一般使用什么进行线上线下互通
  20. 计算机启动时间过长,电脑开机时间太长怎么优化

热门文章

  1. php系统函数区分大小写,php函数名区分大小写吗?
  2. java serializable 源码_Java源码分析之-Serializable接口
  3. android开发 文件分享到应用,Android 实现文件分享功能(共享多个文件)
  4. C语言结构体字节对齐
  5. C atoi函数
  6. C 的16个大坑,你能躲过几个?
  7. 微软project服务器搭建,Project Professional 版本(Project Server 2010 设置)
  8. 拆分js文件_2021入门Webpack,看这篇就够了:Webpack.config.js 解析
  9. C++ vector求均值和方差
  10. 【渝粤教育】广东开放大学 房屋建筑学 形成性考核 (50)