thinkphp源码分析(二)—入口篇

迭代苔原
• 阅读 2856

源码分析---入口篇

源码分析

应用入口

用户发起的请求都会经过应用的入口文件,通常是 ==public/index.php==文件。当然,你也可以更改或者增加新的入口文件。

通常入口文件的代码都比较简单,一个普通的入口文件代码如下:


// 应用入口文件

// 定义项目路径
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
一般入口文件以定义一些常量为主,支持的常量请参考后续的内容或者附录部分。

通常,我们不建议在应用入口文件中加入过多的代码,尤其是和业务逻辑相关的代码。

加载引导文件


// ThinkPHP 引导文件
// 1. 加载基础文件
require __DIR__ . '/base.php';

// 2. 执行应用
App::run()->send();

加载基础文件

// __DIR__ . '/base.php'文件


//定义常量
define('THINK_VERSION', '5.0.24');

....//常量太多省略了部分


// 载入Loader类
require CORE_PATH . 'Loader.php';

// 加载环境变量配置文件
if (is_file(ROOT_PATH . '.env')) {
    $env = parse_ini_file(ROOT_PATH . '.env', true);

    foreach ($env as $key => $val) {
        $name = ENV_PREFIX . strtoupper($key);

        if (is_array($val)) {
            foreach ($val as $k => $v) {
                $item = $name . '_' . strtoupper($k);
                putenv("$item=$v");
            }
        } else {
            putenv("$name=$val");
        }
    }
}

// 注册自动加载
\think\Loader::register();

// 注册错误和异常处理机制
\think\Error::register();

// 加载惯例配置文件
\think\Config::set(include THINK_PATH . 'convention' . EXT);

该部分主要是定义一些系统常量,关键点是引入了自动加载类并且注册了自动加载,使得框架可以自动引入类文件,业务层只要直接use对应命名空间的类即可进行实例化,注册错误及异常处理机制, 加载默认配置等操作。

最后就是应用启动,App::run()->send();

点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
4年前
tp5中index.php的隐藏
一,找到/public/.htaccess文件,如果你的入口文件已经移动到根目录下,那么你的.htaccess文件也要剪切到根目录下,总之要确保.htaccess跟入口的index.php保持同级。二,根据你的php环境分别设置.htaccess文件:Apache:!复制代码(https://oscimg.oschina.net/os
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
4年前
thinkphp5 不用主机配置URL重写
可以通过URL重写隐藏应用的入口文件index.php,下面是相关服务器的配置参考:\Apache\httpd.conf配置文件中加载了mod\_rewrite.so模块AllowOverrideNone将None改为All把下面的内容保存为.htaccess文件放到应用入口文件的同级目录下<IfModulemod
Easter79 Easter79
4年前
SpringBoot学习(五)
SpringBoot的核心1、入口类和@SpringBootApplicationSpringBoot的项目一般都会有\Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法。而@SpringBootApplication注解是SpringBoot的核心
Stella981 Stella981
4年前
SpringBoot学习(五)
SpringBoot的核心1、入口类和@SpringBootApplicationSpringBoot的项目一般都会有\Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法。而@SpringBootApplication注解是SpringBoot的核心
Wesley13 Wesley13
4年前
thinkphp url模式
入口文件是应用的单一入口,对应用的所有请求都定向到应用入口文件,系统会从URL参数中解析当前请求的模块、控制器和操作:1.http://serverName/index.php/模块/控制器/操作这是3.2版本的标准URL格式。可以通过设置模块绑定或者域名部署等方式简化URL地址中的模块及控制器名称。URL大小写
Stella981 Stella981
4年前
SpringBoot核心
1.基本配置1.1入口类和@SrpingBootApplicationSpringBoot通常有一个名为\Application的入口类,入口类里有一个main方法,这个main方法就是一个标准的java应用的入口方法。在main方法中使用SpringApplicatio
Easter79 Easter79
4年前
SpringBoot核心
1.基本配置1.1入口类和@SrpingBootApplicationSpringBoot通常有一个名为\Application的入口类,入口类里有一个main方法,这个main方法就是一个标准的java应用的入口方法。在main方法中使用SpringApplicatio
Stella981 Stella981
4年前
Noark入门之协议映射
0x00消息控制器消息控制器,主要作用就是为每个模块提供消息处理的入口.这里的消息不仅仅是协议,还有内部指令,事件等等逻辑入口,这也是为了响应线程模型作出的一种支撑,只要入口在此消息控制器内,那必然走期望的线程调度。@Controller用于标识一个类为当前模块的消息控制器入口.@Controller(threadGroup
IT全栈视野 IT全栈视野
1年前
全面理解 HarmonyOS NEXT 的应用代码结构
HarmonyOSNEXT的应用代码结构通常包含以下几个主要部分:entry目录:这通常是应用的入口点,包含了应用的主要页面或功能模块的代码。pages目录:存放各个页面的代码文件,每个页面可能有自己的.js(逻辑)、.css(样式)和.hml(布局)文件