我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何解析ThinkPHP5之 _initialize()初始化方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何解析ThinkPHP5之 _initialize()初始化方法

小编给大家分享一下如何解析ThinkPHP5之 _initialize()初始化方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

ThinkPHP5之 _initialize() 初始化方法详解

前言

_initialize() 这个方法在官方手册里是这样说的:

如果你的控制器类继承了\think\Controller类的话,可以定义控制器初始化方法_initialize,在该控制器的方法调用之前首先执行。

其实不止5,在之前的版本中也出现过,这里和大家聊一聊它的实现过程吧。

示例

下面是官方手册上给的示例:

namespace app\index\controller;use think\Controller;class Index extends Controller{    public function _initialize()    {        echo 'init<br/>';    }    public function hello()    {        return 'hello';    }    public function data()    {        return 'data';    }}

如果访问

http://localhost/index.php/index/Index/hello

会输出

inithello

如果访问

http://localhost/index.php/index/Index/data

会输出

initdata

分析

因为使用必须要继承\think\Controller类,加上这个又是初始化,所以我们首先就想到了\think\Controller类中的 __construct(),一起来看代码:

    public function __construct(Request $request = null)    {        if (is_null($request)) {            $request = Request::instance();        }        $this->view    = View::instance(Config::get('template'), Config::get('view_replace_str'));        $this->request = $request;        // 控制器初始化        if (method_exists($this, '_initialize')) {            $this->_initialize();        }        // 前置操作方法        if ($this->beforeActionList) {            foreach ($this->beforeActionList as $method => $options) {                is_numeric($method) ?                $this->beforeAction($options) :                $this->beforeAction($method, $options);            }        }    }

细心的你一定注意到了,在整个构造函数中,有一个控制器初始化的注释,而下面代码就是实现这个初始化的关键:

// 控制器初始化if (method_exists($this, '_initialize')) {    $this->_initialize();}

真相出现了有木有?!

其实就是当子类继承父类后,在没有重写构造函数的情况下,也自然继承了父类的构造函数,相应的,进行判断当前类中是否存在 _initialize 方法,有的话就执行,这就是所谓的控制器初始化的原理。

延伸

如果子类继承了父类后,重写了构造方法,注意调用父类的__construct()哦,否则是使用不了的,代码如下:

public function __construct(){    parent::__construct();    ...其他代码...}

看完了这篇文章,相信你对“如何解析ThinkPHP5之 _initialize()初始化方法”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何解析ThinkPHP5之 _initialize()初始化方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何解析ThinkPHP5之 _initialize()初始化方法

小编给大家分享一下如何解析ThinkPHP5之 _initialize()初始化方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!ThinkPHP5之 _initialize() 初始化方法详解前言_initialize(
2023-06-14

word无法初始化visual如何解决

这个问题可能是由于缺少必要的依赖项或出现了一些配置问题引起的。以下是一些可能的解决方法:1. 确保已正确安装了Microsoft Visual Studio(适用于C++开发)。2. 检查是否已安装了所需的C++编译器。可以在Visual
2023-10-09

WinXP注册表如何初始化有哪些方法

在我们平常安装软件的过程中,有很多软件的注册表会进驻系统,即使卸载了软件也会一直留在其中。而注册表是系统的敏感区,让很多朋友编程客栈都不怎么敢碰它,怕一清理注册表就把WinXP系统弄崩溃了。想要初始化WinXP注册表,重启是没有用的,需要使
2023-06-10

iOS经验之初始化方法中不该设置self.view的属性浅析

前言 iOS初始化方法包括系统默认的和自定义的,常见系统初始化方法有init, initWithFrame:, initWithNibName:bundle:等,自定义则是各式各样。日常iOS项目开发过程中,我们经常在类的初始化方法中初始化
2022-05-28

如何实现bean初始化摧毁方法的注入

这篇文章主要为大家介绍了如何实现bean初始化摧毁方法的注入详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-18

Spring源码解析容器初始化构造的方法是什么

这篇“Spring源码解析容器初始化构造的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring源码解析容器初
2023-07-02

spring容器启动如何实现初始化某个方法

小编给大家分享一下spring容器启动如何实现初始化某个方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、前言很多时候,我们需要在项目启动的时候,就要完成某些
2023-06-20

win11玩lol无法初始化图形设备如何解决

本文小编为大家详细介绍“win11玩lol无法初始化图形设备如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“win11玩lol无法初始化图形设备如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。win
2023-06-30

如何让每个 cobra 命令解析自己的标志?获取初始化循环(预期,但如何避免?)

本篇文章给大家分享《如何让每个 cobra 命令解析自己的标志?获取初始化循环(预期,但如何避免?)》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识
如何让每个 cobra 命令解析自己的标志?获取初始化循环(预期,但如何避免?)
2024-04-05

如何进行网站开发中转化率比较低的解决方法分析

如何进行网站开发中转化率比较低的解决方法分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。网站转化率低的一些表现,主要分析网站的转化率低的一些情况,这些情况大家应该都遇到过,但
2023-06-12

C#中如何使用远程调试和性能分析工具优化代码性能及解决方法

C#中如何使用远程调试和性能分析工具优化代码性能及解决方法引言:在软件开发过程中,优化代码的性能是非常重要的一项任务。通过代码优化,可以使程序运行更加高效,提高用户体验,并减少资源消耗。在C#中,我们可以利用远程调试和性能分析工具来帮助我们
2023-10-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录