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

thinkphp之启动

版本3.2.3应用入口文件index.php,判断了php版本是否符合,定义了两个常量,然后就require.ThinkPHPThinkPHP.php。ThinkPHP.php文件

版本3.2.3

应用入口文件index.php,判断了php版本是否符合,定义了两个常量,然后就require './ThinkPHP/ThinkPHP.php'

ThinkPHP.php文件定义了各种常量,加载了Think.class.php,也就是Think\\Think类,执行它的start()函数。index.php中的2个常量在ThinkPHP.php也有定义,大概index.php是设置需要的常量的地方。

框架开始起码要做的autoload,配置的引入,url的解析等等,都要这里面实现。

autoload

通过spl_register_autoload把Think\\Think:autoload函数注册为自动加载函数。查找一个类,先是在$_map这个保存类映射的数组查找,如果没有,看命名空间是不是Think,Org,Behavior,Com,Vendor开头的,是的话就以这个目录为初始目录。比如

namespace Home\\Controller;
use Think\\Controller;
class IndexController extends Controller {
public function index()
{
$a = new \\Vendor\\Test\\Test;
}
}

命名空间是Vendor\Test\Test,Vendor是其中一个,就会去include Vendor文件夹下的Test文件夹下的Test.class.php文件。

namespace Vendor\\Test;
class Test {}

如果不是上面的五个就以Application为初始目录

// 检测自定义命名空间 否则就以模块为命名空间
$namespace = C('AUTOLOAD_NAMESPACE');
$path = isset($namespace[$name])? dirname($namespace[$name]).'/' : APP_PATH;

加载配置

根据配置的常量确定应用模式,选择对应的mode文件,也就是Mode文件夹下的几个文件,默认普通模式,选择common.php文件。里面的内容是一个多维素组$mode,包括配置文件数组config,别名数组alias,核心文件数组core,行为扩展数组tags。include进来$mode[‘core’]里的文件

// 函数和类文件
'core' => array(
THINK_PATH.'Common/functions.php',
COMMON_PATH.'Common/function.php',
CORE_PATH . 'Hook'.EXT,
CORE_PATH . 'App'.EXT,
CORE_PATH . 'Dispatcher'.EXT,
//CORE_PATH . 'Log'.EXT,
CORE_PATH . 'Route'.EXT,
CORE_PATH . 'Controller'.EXT,
CORE_PATH . 'View'.EXT,
BEHAVIOR_PATH . 'BuildLiteBehavior'.EXT,
BEHAVIOR_PATH . 'ParseTemplateBehavior'.EXT,
BEHAVIOR_PATH . 'ContentReplaceBehavior'.EXT,
),

其中就包括functions.php,里面是Think系统函数,立马会用到。
$mode[‘config’]中存的是配置文件。

// 加载配置
'config' => array(
THINK_PATH.'Conf/convention.php', // 系统惯例配置
CONF_PATH.'config'.CONF_EXT, // 应用公共配置
),

里面的数据都会被提取出来,存到系统函数C里static变量。$mode[‘alias’]存的是类的别名。

// 别名定义
'alias' => array(
'Think\\Log' => CORE_PATH . 'Log'.EXT,
'Think\\Log\\Driver\\File' => CORE_PATH . 'Log/Driver/File'.EXT,
'Think\\Exception' => CORE_PATH . 'Exception'.EXT,
'Think\\Model' => CORE_PATH . 'Model'.EXT,
'Think\\Db' => CORE_PATH . 'Db'.EXT,
'Think\\Template' => CORE_PATH . 'Template'.EXT,
'Think\\Cache' => CORE_PATH . 'Cache'.EXT,
'Think\\Cache\\Driver\\File' => CORE_PATH . 'Cache/Driver/File'.EXT,
'Think\\Storage' => CORE_PATH . 'Storage'.EXT,
),

存到了Think类的static变量$_map里。剩下的$mode[‘tags’]存到\Think\Hook的static变量$tags里。各自放好

接下来还有些设置,时区设置,自动创建目录结构,调试文件配置先略过。

start()函数就结束了,剩下最后一行, App::run(),调用\Think\App的run函数。

static public function run() {
// 应用初始化标签
Hook::listen('app_init');
App::init();
// 应用开始标签
Hook::listen('app_begin');
// Session初始化
if(!IS_CLI){
session(C('SESSION_OPTIONS'));
}
// 记录应用初始化时间
G('initTime');
App::exec();
// 应用结束标签
Hook::listen('app_end');
return ;
}

推荐阅读
  • 在CodeIgniter框架中集成新库文件的过程中,我遇到了一些困惑。具体来说,在跟随nettuts的认证教程时,对于在Welcome控制器中添加的构造函数代码,特别是关于Session的验证部分,我感到不太理解。这部分内容涉及如何确保Session已经初始化并具备相应的功能,这对于实现用户认证至关重要。为了更好地掌握这一知识点,我计划深入研究CodeIgniter的官方文档,并参考更多相关资源,以确保能够正确地集成和使用新库文件。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文探讨了如何在社交媒体平台上高效地获取和管理好友列表。通过分析当前流行的社交应用,如微信、Facebook等,提出了一系列实用的方法和技巧,帮助用户优化好友管理流程,提升社交体验。文章还介绍了相关工具和插件,以进一步简化操作步骤,确保用户能够快速、准确地管理和维护好友关系。 ... [详细]
  • 在 CentOS 7 上部署和配置 RabbitMQ 消息队列系统时,首先需要安装 Erlang,因为 RabbitMQ 是基于 Erlang 语言开发的。具体步骤包括:安装必要的依赖项,下载 Erlang 源码包(可能需要一些时间,请耐心等待),解压源码包,解决可能出现的错误,验证安装是否成功,并将 Erlang 添加到环境变量中。接下来,下载 RabbitMQ 的 tar.xz 压缩包,并进行解压和安装。确保每一步都按顺序执行,以保证系统的稳定性和可靠性。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了laravel中抽离公共模版共用数据相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文详细介绍如何在忘记MySQL服务器密码的情况下进行密码重置,包括具体的步骤和注意事项。 ... [详细]
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
  • 微服务优雅上下线的最佳实践
    本文介绍了微服务上下线的正确姿势,避免使用 kill -9 等粗暴手段,确保服务的稳定性和可靠性。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 本文详细解析了 Yii2 框架中视图和布局的各种函数,并综述了它们在实际开发中的应用场景。通过深入探讨每个函数的功能和用法,为开发者提供了全面的参考,帮助他们在项目中更高效地利用这些工具。 ... [详细]
  • 在 iOS 开发中,经常会遇到 `@(YES)`、`@[firstViewController]` 以及 `@{@a:@b}` 这样的语法糖。这些简化的写法分别用于初始化布尔值、数组和字典对象,能够显著提高代码的可读性和编写效率。例如,`@(YES)` 可以快速创建一个布尔值对象,`@[firstViewController]` 则用于创建包含单个元素的数组,而 `@{@a:@b}` 则用于创建键值对字典。理解这些语法糖的使用方法,有助于开发者更加高效地进行编码。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 本指南详细介绍了如何从零开始搭建ThinkPHP项目环境。首先,我们将创建一个名为“test”的PHP项目,并导入ThinkPHP框架。接下来,配置单入口文件,确保项目能够正确运行。ThinkPHP作为一个基于单一入口模式的PHP框架,简化了开发流程。通过本文,读者将学会如何高效地设置和测试ThinkPHP项目。 ... [详细]
  • PHP编程学习心得与技巧分享
    strpos($str1,$str2[$offset]);str1中搜索str2,返回第一次出现的位置,头是0;echo`ipconfig`;等效于echoshell_exec(ipconfig);echo@(30);&& ... [详细]
  • php性能优化分析工具XDebug大型网站调试工具_PHP
    php性能优化分析工具XDebug大型网站调试工具_PHP:一、安装配置1、下载PHP的XDebug扩展,网址:http:xdebug.org2、在Linux下编译安装XDebug ... [详细]
author-avatar
玉乔嘉芸孟峰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有