ThinkPHP5
1、入口文件
虛擬主機目錄/public/index.php
2、引入啓動文件
虛擬主機目錄/thinkphp/start.php
3、運行App下面的run方法
虛擬主機目錄/thinkphp/library/think/App.php -> run()
4、實例化$request對象
虛擬主機目錄/thinkphp/library/think/App.php -> Request::instance();
5、進行路由檢測
虛擬主機目錄/thinkphp/library/think/App.php -> self::routeCheck($request, $config);
6、執行exec方法
虛擬主機目錄/thinkphp/library/think/App.php -> self::exec($dispatch, $config);
7、根據dispatch數組裏面的type類型打開相對應的控制器
虛擬主機目錄/thinkphp/library/think/App.php -> self::module($result, $config, $convert = null);
8、調用Loader::controller通過反射機制加載控制器對象
虛擬主機目錄/thinkphp/library/think/App.php -> Loader::controller(...);
9、調用請求方法invokeMethod($method, $vars = [])
虛擬主機目錄/thinkphp/library/think/App.php -> self::invokeMethod(...);
10、調用$response對象中的send方法把數據輸出瀏覽器中
虛擬主機目錄/thinkphp/library/think/Response.php -> send();
Swoole Server 四層生命週期
-
程序全局期:
- Server->start 之前創建的對象資源,持續駐留內存,worker共享。
- 全局期代碼在 Server 結束時纔會釋放,reload 無效。
-
進程全局期:
- Server 啓動後創建多個進程,它們內存空間獨立,非共享內存。
- worker 進程啓動後(onWorkerStart)引入的代碼在進程存活期有效,reload 會重新加載。
-
會話期:
- 在 onConnect 或 第一次onReceive 時創建,onClose 時銷燬。
- 客戶端連接後創建的對象會常駐內存,直到此客戶端離開才銷燬。
-
請求期:
- 在 onReceive/onRequest 收到請求開始,直到發送 Response 返回。
- 請求期創建的對象會在請求完成後銷燬,和 fpm 程序中的對象一樣。
Laravel
生命週期
-
1.Web 服務器將請求發送到項目的 public/index.php 文件。
-
2.PHP 解釋器接收到請求後,解釋執行 index.php 文件中的 PHP 代碼。此時,由 Componser 包管理器生成的自動加載文件被加載。
-
3.創建Laravel 服務容器實例,引導安裝 laravel 組件。
-
4.HTTP 或 Console 內核接收到 HTTP 請求,加載 Laravel 服務提供者,同時,將請求分發給路由器執行。
-
5.路由器將渲染視圖文件,並生成響應數據給 Web 服務器。
laravel的重點
- laravel5之前成爲IoC(Inversion of Control /ɪnˈvɜːrʒn/)、
- 依賴注入(Dependency Injection /dɪˈpendənsi/ /ɪnˈdʒekʃn/ )
- 反射解決方案 ReflectionClass (/rɪˈflekʃn/ )反射是一種在運行時檢查類和方法的能力,遞歸查找類以及類的依賴。
- 契約即接口interface,接口實際上並不做任何事情,只是類的模版
- 服務提供者providers,註冊服務到容器中的
- 框架目錄,主要目的是分層:
- 事件監聽器、錯誤處理器、請求驗證器
- 隊列處理器、路由過濾器、用戶認證、緩存和會話驅動
- 設計模式
- 單一職責原則
一個類的邊界和職責應當是十分狹窄且集中的 - 開放封閉原則
又稱開閉原則,規定代碼對擴展是開放的,對修改是封閉的 - 里氏替換原則
規定對象可以被其子類的實例所替換,並且不會影響到程序的正確性 - 接口隔離原則
不應該強制接口的實現依賴於它不使用的方法 - 依賴反轉原則
它規定高層次的代碼不應該依賴低層級的代碼
- 單一職責原則