thinkphp中__construct()和__initialize()的介绍

thinkphp中__construct()和__initialize()的介绍

关于thinkphp中的__construct()和_initialize()的理解

网上有很多的说法和用法,自己测试了一下,下面是根据测试结果并结合自己的理解得出的结论,如有不对的地方,欢迎大家纠正!!!

我们先看一下Thinkphp自带的Controlle类的内容(ThinkPHPLibraryThinkController.class.php)

看一下构造函数:

立即学习“PHP免费学习笔记(深入)”;

/**     * 架构函数 取得模板对象实例     * @access public     */    public function __construct() {        Hook::listen('action_begin',$this->config);        //实例化视图类        $this->view     = Think::instance('ThinkView');        //控制器初始化        if(method_exists($this,'_initialize'))            $this->_initialize();    }

从Controller类中的构造函数中可以知道,该构造函数会判断对象中是否有_initialize方法,如果有,就执行先_initialize方法,

因此,如果我们在自己定义的控制器中,

1):有重写构造函数:

①在重写的构造中有实现父类的构造函数(parent::construct() ),

如果该控制器中有定义_initialize()方法,那么,我们在调用该控制器中的方法时,会先执行_initialize()方法,然后再执行我们需要的方法,看代码:

<?phpnamespace HomeController;use ThinkController;class IndexController extends Controller { public function __construct() {parent::__construct();self::b();echo '我是构造
';}public function _initialize() {echo '我先来
';// parent::_initialize();} public function index(){ self::b(); echo '这是index'; } public function b() { echo 'bbbb
'; }} /*当执行index方法时,打印结果:我先来bbbb我是构造bbbb这是index*/

②:在重写的构造中没有实现父类的构造函数,执行方法时,定义的_initialize()方法则没有作用(不会在执行方法时,先执行_initialize方法),看代码:

百度文心百中 百度文心百中

百度大模型语义搜索体验中心

百度文心百中 22 查看详情 百度文心百中

<?phpnamespace HomeController;use ThinkController;class IndexController extends Controller { public function __construct() {// parent::__construct();self::b();echo '我是构造
';}public function _initialize() {echo '我先来
';// parent::_initialize();} public function index(){ self::b(); echo '这是index'; } public function b() { echo 'bbbb
'; }} /*当执行index方法时,打印结果:bbbb我是构造bbbb这是index*/

注:这里面的所说的先执行_initialize()方法,是在parent::__construct();前没有任何函数调用,如果你非得在parent::__construct();前来个self::b(),那没得说,肯定是先执行b(),不过一般不这样写,在实现父类的构造函数前一般没有任何输出和配置

再有,如果是继承,如果父类有构造函数,子类在其构造函数一般先把父类的构造函数先初始化,确保代码的原始性和完整性

2)没有重写构造函数,也就是说在我们定义的控制器中没有声明构造函数

这种情况,如果在控制器中有定义_initialize()方法,则当我们调用其他方法时,会先调用_initialize()方法,看代码:

<?phpnamespace HomeController;use ThinkController;class IndexController extends Controller { // public function __construct() {// // parent::__construct();// self::b();// echo '我是构造
';// }public function _initialize() {echo '我先来
';// parent::_initialize();} public function index(){ self::b(); echo '这是index'; } public function b() { echo 'bbbb
'; }} /*当执行index方法时,打印结果:我先来bbbb这是index*/

另外,_initialize()还可以用来继承

<?phpnamespace HomeController;use ThinkController;class BaseController extends Controller {public function __construct() {parent::__construct(); echo '我是父类
';} public function _initialize() {echo '我先来
';} public function a() {echo 'aaaa
';}}
<?phpnamespace HomeController;use ThinkController;class IndexController extends BaseController { public function __construct() {parent::__construct();self::b();echo '我是构造
';}public function _initialize() {parent::_initialize();echo '我是子类先来
';} public function index(){ self::b(); echo '这是index'; } public function b() { echo 'bbbb
'; }} /*当执行index方法时,打印结果:我先来我是子类先来我是父类bbbb我是构造bbbb这是index*/

注意:如果父类的构造函数中没有parent::construct(),定义的_initialize()也不起作用

那么,同时存在__construct()(该构造函数初始化了父类的构造函数)和_initialize() ,到底先执行哪个呢?

答案是——先执行_initialize()方法,也就是说,在满足条件下,_initialize()函数是在任何方法执行之前,都要执行的,包括构造函数,

当然,如果你在要执行的方法中又调用的另一个或者多个方法,在另外调用那些方法时,_initialize()方法是不会再执行了,它关联的是你首次调用的方法,也就是说,方法里面干什么,它管不着了。

推荐教程:thinkphp教程

以上就是thinkphp中__construct()和__initialize()的介绍的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/356991.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月6日 01:14:46
下一篇 2025年11月6日 01:15:37

相关推荐

  • php框架的整理和补充

    选型应匹配项目需求,Laravel适合中大型应用,Symfony适合企业级定制,CodeIgniter和ThinkPHP适合小型或快速上线项目,需关注自动加载、日志分级、迁移分离、中间件顺序及微框架灵活使用,合理优化才能稳定支撑迭代。 PHP框架的选择和使用,关键不在数量多,而在是否匹配项目需求、团…

    2025年12月13日
    000
  • 宝塔怎么上传php源码_宝塔上传php源码配置与部署步骤【指南】

    创建网站环境:登录宝塔面板,添加站点并配置域名、PHP版本及数据库;2. 上传源码:通过文件管理器或FTP将PHP源码上传至网站根目录并解压;3. 配置权限与伪静态:设置runtime等目录权限为755或777,按框架选择伪静态规则;4. 完成安装:访问域名运行安装向导,导入数据库,删除instal…

    2025年12月13日
    000
  • ThinkPHP配置文件的方法

    ThinkPHP配置文件用于定义运行参数,存于config/目录下,按框架默认→应用公共→环境→运行时顺序加载覆盖,支持config()函数读写及.env多环境管理。 ThinkPHP 的配置文件主要用于定义应用运行时的各种参数,比如数据库连接、缓存驱动、调试模式等。核心配置通过 PHP 数组返回,…

    2025年12月13日
    000
  • 宝塔怎么安装php源码_宝塔安装php源码环境与步骤【教程】

    首先安装PHP环境,登录宝塔面板→软件商店→搜索PHP→选择版本安装;再添加网站并设置根目录与PHP关联;接着上传PHP源码至站点目录,确保index.php在根目录;然后调整PHP配置,修改内存、执行时间及禁用函数;最后根据框架设置伪静态规则,如ThinkPHP需添加rewrite规则并保存生效。…

    2025年12月13日
    000
  • 怎么用phpstudy安装php源码_用phpstudy安装php源码配置与法【教程】

    首先下载安装PhpStudy并选择合适路径,然后在面板中添加站点,设置域名和源码目录,选择PHP版本后保存;接着启动Apache或Nginx服务,浏览器访问对应域名或localhost端口即可运行PHP源码;通过修改php.ini可启用扩展、调整上传限制、开启错误显示,并支持伪静态规则,便于开发调试…

    2025年12月13日
    000
  • php中QPM框架是什么?

    目前PHP中并无公认的QPM框架,可能是对Laravel、ThinkPHP等主流框架的误写,或指代内部私有框架、工具缩写(如包管理脚本),亦或是极小众未被广泛认知的实验性项目。 QPM并不是PHP中广泛认知或主流的框架名称。目前在PHP社区中,并没有一个被官方认可或广泛使用的框架叫做“QPM”。可能…

    2025年12月13日
    000
  • php源码怎么进入后台_php源码进入后台入口与权限法【指南】

    1、通过常见路径如/admin.php或工具扫描尝试访问后台;2、分析源码路由配置定位真实入口;3、查询数据库获取或修改管理员凭证;4、利用漏洞篡改权限参数提升身份;5、检查.htaccess或代码中的IP限制规则并绕过。 如果您尝试访问某个PHP源码构建的网站后台,但无法找到登录入口或缺乏相应权限…

    2025年12月13日
    000
  • PHP之ThinkPHP有几种查询?

    ThinkPHP有5种核心查询方式:1.基础链式查询,2.原生SQL查询,3.视图查询,4.关联查询(含预加载),5.查询作用域;其中链式+关联+作用域覆盖90%以上需求。 ThinkPHP 的查询方式主要围绕模型(Model)和查询构建器(Query Builder)展开,常见且实用的有 5 种核…

    2025年12月13日
    000
  • php首页源码怎么找_php首页源码查找位置与定位法【技巧】

    首先检查网站根目录下的index.php等默认入口文件,查看是否包含首页输出或模板调用;若使用框架,则需查看路由配置文件(如web.php)中根路径’/’对应的控制器和方法,进而定位实际渲染逻辑;同时可通过服务器配置(如DirectoryIndex)确认默认首页文件;还可通过…

    2025年12月13日
    000
  • php中Quercus框架的安装

    Quercus是Java实现的PHP引擎,用于在Tomcat或Resin中运行PHP,适用于已有Java项目需集成少量PHP的场景,不支持PHP 7+且已停止维护,现代开发不推荐使用。 Quercus 并不是 PHP 的框架,而是 Caucho Technology 开发的一个 Java 实现的 P…

    2025年12月13日
    000
  • PHP中ThinkPHP的高级查询

    ThinkPHP高级查询支持多表关联、闭包动态条件、子查询及聚合统计。通过join链式调用实现灵活关联;闭包where按需拼接防SQL注入;子查询支持in/exist;group+聚合函数满足报表需求。 ThinkPHP 的高级查询主要体现在对复杂业务场景的支持上,比如多表关联、子查询、聚合统计、动…

    2025年12月13日
    000
  • 有php源码怎么搭建_有php源码搭建站点与配置法【指南】

    首先搭建PHP运行环境,安装Apache或Nginx、PHP及MySQL;随后将源码部署至Web服务器根目录并设置文件权限;接着配置数据库连接信息,确保程序可访问数据库;然后创建数据库并导入SQL文件以初始化数据结构;最后调整服务器配置,启用重写模块、设置默认首页并关闭错误显示以保障安全。 如果您已…

    2025年12月13日
    000
  • php源码怎么查杀后面_php源码查杀后门与清理技巧【方法】

    发现PHP源码中存在后门时,应立即采取措施清除恶意代码并加固系统安全。首先使用D盾、河马等Webshell查杀工具对网站目录进行全盘扫描,识别并隔离标记为“疑似Webshell”的高危文件;随后通过代码编辑器全局搜索eval、assert、system等危险函数,结合上下文分析其调用合理性,重点排查…

    2025年12月13日
    000
  • php源码怎么做_php源码做项目流程与实现法【教程】

    首先明确PHP项目开发需遵循系统化流程,具体包括:一、需求分析与规划,明确功能模块与技术栈;二、搭建本地环境,安装XAMPP等工具并配置服务;三、设计数据库结构,创建表并配置连接参数;四、按MVC模式组织代码,编写模型、控制器与视图文件;五、逐项实现注册登录、数据展示等功能模块;六、采用预处理语句、…

    2025年12月13日
    000
  • php消息队列的介绍

    消息队列是PHP中实现异步处理、流量削峰和系统解耦的关键技术,通过生产者将任务如发邮件、处理订单等放入队列,消费者后台逐步执行,提升系统稳定性和用户体验;常用实现方式包括Redis List、RabbitMQ、Kafka及ThinkPHP的think-queue扩展。 PHP消息队列不是什么神秘技术…

    2025年12月13日
    000
  • php直播源码怎么用_php直播源码用部署与播放设置【指南】

    部署PHP直播系统需先配置Linux服务器环境,安装Nginx、PHP 7.4+和MySQL,通过宝塔面板可简化流程;随后上传源码至网站根目录,解压后修改数据库配置文件并导入live.sql数据,设置运行目录为/public并配置伪静态;接着部署流媒体服务如SRS或Nginx-RTMP模块,配置推流…

    2025年12月13日
    000
  • php空间怎么上传网站源码_php空间上传网站源码步骤与法【技巧】

    上传网站源码到PHP空间需先确认PHP版本、扩展支持并创建数据库;2. 可通过FTP工具(如FileZilla)或主机控制面板上传压缩源码并解压至根目录;3. 最后通过浏览器访问域名完成安装向导,填写数据库信息,删除安装目录并设置文件权限即可运行网站。 上传网站源码到PHP空间是搭建网站的基础操作,…

    2025年12月13日
    000
  • php源码怎么更新缓存_php源码更新缓存配置与刷新步骤【技巧】

    修改PHP代码后页面未更新,需清除缓存。1、调整php.ini中OPcache配置并调用opcache_reset()刷新;2、重启Apache或Nginx+PHP-FPM服务;3、删除框架缓存文件或执行php artisan cache:clear等命令;4、运行composer dump-aut…

    2025年12月13日
    000
  • php源码源码怎么安装_用PHP环境安装源码步骤教程【教程】

    首先搭建PHP运行环境,选择XAMPP等工具安装并启动Apache和MySQL服务,将源码放入htdocs目录;接着配置数据库,通过phpMyAdmin创建数据库并导入.sql文件,修改config.php中的连接信息;然后设置uploads、cache等目录的可写权限为755或777;之后访问ht…

    2025年12月13日
    000
  • php怎么找源码_php找源码渠道与安全获取技巧

    可通过开源平台如GitHub、官方渠道、Composer、技术社区及本地服务器安全获取PHP源码。首先选择可信来源,优先下载高星项目或官网发布版本,并核对哈希值确保完整性;其次利用Composer安装依赖查看第三方库代码,或参与社区交流获取实战项目资源;最后可登录部署服务器直接浏览现有系统源码结构,…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信