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

phpmvc流程图,TP执行流程详解

######TP执行流程详解####TP执行流程我查看了TP的核心源码,下面是我对TP执行的一些理解(从入口开始,只是一个大概流程):1.入口文件&#x

###### TP执行流程详解

#### TP执行流程

我查看了TP的核心源码,下面是我对TP执行的一些理解(从入口开始,只是一个大概流程):

1. 入口文件:

单入口文件,里面包含TP的入口文件,``require './ThinkPHP/ThinkPHP.php';

有多个模块的话也可以定义多个入口,(比如对于后台模块,再新建一个admin.php)

2.TP入口文件ThinkPHP.php

1. 记录运行时间(钩子),用于输出日志和调试,个人认为没什么用.........

2. 定义系统常量:URL模式、类文件后缀、当前文件目录、系统运行目录、是否调试模式、缓存目录、模版目录、配置文件目录....等等,然后引入核心Think类``Think.class.php`` ,引入后执行这个类中的start函数

3.Think.class.php类以及start函数

1.在start函数中,先定义注册函数,然后定义错误和异常处理函数(spl_autoload_register用于自动加载未加载的类,register_shutdown_function定义PHP程序执行完成后执行的函数,set_exception_handler是自定义异常处理函数,这三个函数的参数都是一个方法名,当自动加载、执行完成、出现异常的时候,将用这里面传的方法参数代替php原本的处理机制,比如 set_exception_handler('Think\Think::appException'); 出现异常的时候会调用appException函数,而不是PHP原生的异常处理函数)

2.加载各种文件:核心文件、配置文件、模式别名定义、模式行为定义等

3.设置系统时区

4.调用App类中的run方法

5.这个类中的其他函数就是在第一步中说到的自定义加载、处理函数,(自定义加载中用到了类名映射,就是从当前url中解析出模块名、控制器名、方法名,)

4.App类以及run函数

1.run函数中先执行监听(钩子类中的)函数监听init方法

2.执行init方法(加载动态配置、安全过滤等);

3.再执行钩子类监听函数,监听begin方法,设置session,获得到应用执行时间

4.执行exec函数(去寻找从url中解析出的类,并将其实例化后调用方法,输出结果)

5.执行监听函数监听end函数(应用结束);

这样整个执行流程就完毕了 ,我看了好几天...挺难懂的,而且我觉得TP中要动态加载的类太多了,对于中小型网站来说,用不上,反而影响运行速度,然后我把这个执行流程里面比较重要的部分挑出来,写进了我的框架中,里面的大部分函数名与TP相同,但是完全是我自己用代码实现的,并没有用TP的思路。下一章会详细讲解我自己理解的MVC框架及思路。



推荐阅读
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 解决php错误信息不显示在浏览器上的方法
    本文介绍了解决php错误信息不显示在浏览器上的方法。作者发现php中的各种错误信息并不显示在浏览器上,而是需要在日志文件中查看。为了解决这个问题,作者提供了一种解决方式:通过修改php.ini文件中的display_errors参数为On,并重启服务。这样就可以在浏览器上直接显示php错误信息了。 ... [详细]
author-avatar
Cyndi丶先生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有