PHP学习心得


框架执行流程以及路由解读

<h2>执行流程</h2> <ul> <li>从容器中获取app实例</li> <li>执行应用程序: run()</li> <li>初始化应用: initialize()</li> <li>设置路径环境变量以及加载环境变量配置文件</li> <li>用到的是env基础类库</li> <li>注册应用命名空间</li> <li>初始化应用: init()</li> <li>设置模块路径: setModulePath</li> <li>对容器中的对象实例进行配置更新</li> <li>注册异常处理类</li> <li>加载当前模块语言包</li> <li>模块请求缓存检查</li> <li>注册异常处理类</li> <li>注册根命名空间</li> <li>加载composer autofile文件</li> <li>注册类库别名</li> <li>注册数据库别名</li> <li>数据库配置初始化</li> <li>设置系统时区</li> <li>获取语言包</li> <li>路由初始化: routerinit()</li> <li>监听 app_init</li> <li>相关绑定</li> <li>监听app_dispatch</li> <li>路由检测</li> <li>记录当前调度信息</li> <li>监听app_begin</li> <li>执行路由调度</li> <li>中间件调度</li> <li>监听app_end</li> <li>send()</li> </ul> <h2>框架执行流程走的文件</h2> <ul> <li>\public\index.php</li> <li>\thinkphp\base.php</li> <li>\thinkphp\library\think\Loader.php</li> <li>\vendor\composer\autoload_static.php</li> <li>\thinkphp\library\think\Error.php</li> <li>\thinkphp\library\think\Container.php</li> <li>\thinkphp\library\think\App.php</li> <li>\thinkphp\library\think\Env.php</li> <li>\thinkphp\library\think\Config.php</li> <li>\thinkphp\convention.php</li> <li>\application\tags.php</li> <li>\thinkphp\library\think\Hook.php</li> <li>\application\common.php</li> <li>\thinkphp\helper.php</li> <li>\application\provider.php</li> <li>\config\app.php</li> <li>\thinkphp\library\think\facade\Env.php</li> <li>\thinkphp\library\think\Facade.php</li> <li>\config\cache.php</li> <li>\config\console.php</li> <li>\config\cookie.php</li> <li>\config\database.php</li> <li>\config\log.php</li> <li>\config\middleware.php</li> <li>\config\session.php</li> <li>\config\template.php</li> <li>\config\trace.php</li> <li>\thinkphp\library\think\Db.php</li> <li>\thinkphp\library\think\Lang.php</li> <li>\thinkphp\library\think\Request.php</li> <li>\thinkphp\library\think\Log.php</li> <li>\thinkphp\library\think\log\driver\File.php</li> <li>\thinkphp\lang\zh-cn.php</li> <li>\route\route.php</li> <li>\thinkphp\library\think\facade\Route.php</li> <li>\thinkphp\library\think\Route.php</li> <li>\thinkphp\library\think\route\Domain.php</li> <li>\thinkphp\library\think\route\RuleGroup.php</li> <li>\thinkphp\library\think\route\Rule.php</li> <li>\thinkphp\library\think\route\RuleItem.php</li> <li>\thinkphp\library\think\route\RuleName.php</li> <li>\thinkphp\library\think\route\dispatch\Url.php</li> <li>\thinkphp\library\think\route\Dispatch.php</li> <li>\thinkphp\library\think\route\dispatch\Module.php</li> <li>\thinkphp\library\think\Middleware.php</li> <li>\thinkphp\library\think\Cookie.php</li> <li>\thinkphp\library\think\View.php</li> <li>\thinkphp\library\think\view\driver\Think.php</li> <li>\thinkphp\library\think\Template.php</li> <li>\thinkphp\library\think\template\driver\File.php</li> <li>\thinkphp\library\think\Session.php</li> <li>\thinkphp\library\think\Debug.php</li> <li>\thinkphp\library\think\Cache.php</li> <li>\thinkphp\library\think\cache\driver\File.php</li> <li>\thinkphp\library\think\cache\Driver.php</li> <li>\application\index\controller\Index.php</li> <li>\thinkphp\library\think\Response.php</li> <li>\thinkphp\library\think\debug\Html.php</li> </ul> <h2>框架执行流程</h2> <h4>1-初始化应用的数据设置</h4> <h4>2-框架执行流程初始化应用init分析</h4> <ul> <li>多次初始化解刨</li> </ul> <pre><code class="language-php">// intit() 被调用了两次 $this-&gt;init(); // 初始化应用 thinkphp/library/think/App.php // 如何检测被多次初始化 // 可以使用断点调用,php内置函数两种方法检测 $debug_backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); // 返回数组内有几个数组就被调用几次</code></pre> <h4>3-框架执行流程初始化应用init分析</h4> <ul> <li>加载相关文件深度分析</li> </ul> <h4>4-框架执行流程初始化应用init分析</h4> <ul> <li>场景分析</li> <li>应用容器绑定定义使用实例</li> <li>application/common/Containertest.php</li> </ul> <pre><code class="language-php">namespace app\common; class Containertest { public function getInfo() { return __METHOD__; } }</code></pre> <ul> <li>application/provider.php</li> </ul> <pre><code class="language-php">return [ // 两种写法都可以 'Containertest' =&gt; '\app\common\Containertest', 'Containertest' =&gt; \app\common\Containertest::class, ];</code></pre> <ul> <li>application/index/controller/Index.php <ul> <li>访问地址 /index.php/index/Index/Containertest</li> </ul></li> </ul> <pre><code class="language-php">public function Containertest() { $getInfo = Container::get('Containertest')-&gt;getInfo(); dump($getInfo); }</code></pre> <h4>5-对容器中的对象实例进行配置更新</h4> <h4>6-调试模式以及代码冗余细讲</h4> <h4>7-路由初始化简单分析</h4> <h4>8-路由定义</h4> <h4>9-路由定义-Route类中rule方法执行方式脑图分析</h4> <h4>10-路由规则预处理讲解</h4> <h4>11-分析路由规则中的变量-parseVar</h4> <h4>12-生成路由标识的快捷访问</h4> <h4>13-路由参数分析</h4> <h4>14-变量规则</h4> <h4>15-资源路由</h4> <ul> <li>支持设置RESTFul请求的资源路由</li> <li>REST(英文:Representational State Transfer,简称REST) ,指的是一组架构约束条件和原则。</li> <li>符合REST设计风格的Web API称为RESTful API <ul> <li><a href="https://www.runoob.com/php/php-restful.html">https://www.runoob.com/php/php-restful.html</a></li> </ul></li> </ul> <h4>16-路由配置-数组方式配置解读</h4> <h4>17-dispatch初认识</h4> <h4>18-route-check 检测URL路由</h4> <h4>19-request类如何找到</h4> <h4>20-检测域名路由</h4> <h4>21-检测路由-合并分组参数</h4> <h4>22-检测URL变量和规则路由是否匹配</h4> <h4>23-解析匹配到的规则路由-路由地址动态处理</h4> <h4>24-发起路由调度</h4>

页面列表

ITEM_HTML