PHP單一入口框架設計簡析
2013年1月22日 19:35:25
大概過程:所有URL請求->重定向到index.php->載入一個類A->分析URL得到引數資訊和將要呼叫的另一個類B->載入這個類B,並將引數資訊傳遞給該類->執行->結束.
入口檔案(通過.htaccess檔案中的rewrite功能把所有請求都轉向這個檔案):
test.php <?php include `./a.php`; //存放處理URL獲得引數資訊的祖先類A $objA = new A(); $objA->run(); exit;
主要入口處理類(相當於zend framework的front,用於處理和分發請求):
a.php <?php class A { public function __construct() { var_dump(`A 建構函式`); } public function run() { include `./b.php`; $obj = new B(); $obj->action(); } public function __destruct() { var_dump(`A 解構函式`); } }
功能類,處理分發來的請求(超級類將URL分解獲得資訊,動態new此class,並將資訊交給此class處理)
b.php <?php class B { public function action() { var_dump(`B action函式`); } }
如果類B沒有繼承類A,執行test.php入口檔案的程式碼結果很容易知道:
string `A 建構函式` (length=14) string `B action函式` (length=14) string `A 解構函式` (length=14)
如果類B繼承了主要入口請求處理類A:
b.php (繼承了A) <?php class B extends A { public function action() { var_dump(`B action函式`); } }
那麼結果是這樣的:
string `A 建構函式` (length=14) string `A 建構函式` (length=14) string `B action函式` (length=14) string `A 解構函式` (length=14) string `A 解構函式` (length=14)
結論1:如果B繼承了A,當在A中建立B的物件那麼會再次呼叫A的建構函式,也只呼叫A的建構函式
結論2:如果要想在B中使用A中的資料(往往是對入口URL處理得到的結果),就必須在A的建構函式中定義這些值
如果在類B中寫了B的建構函式會怎樣?:
<?php class B extends A { public function B() { var_dump(`B 建構函式`); } public function action() { var_dump(`B action函式`); } }
那麼結果是這樣的:
string `A 建構函式` (length=14) string `B 建構函式` (length=14) string `B action函式` (length=14) string `A 解構函式` (length=14) string `A 解構函式` (length=14)
對,和你想的一樣,A的建構函式沒有執行,因為子類的建構函式覆蓋了父類的建構函式
知道這個結果沒有什麼可喜可賀的,重要的是:
結論3:不能寫子類的建構函式,否則你別想從父類哪裡得到任何動態資訊
結論4:最好將類名和類成員函式名字區分開,避免將類名和方法名寫的一樣(別笑,這樣說不是廢話,看下邊程式碼),像zf做的那樣,類名後邊加上`Controller`字尾,方法名後邊加上`Action`字尾
我想大部分人都這樣幹過 <?php class index { public function index() { } }
如果這樣套到單一入口框架中就不行了.
別急,還有:
結論5:因為每次執行子類B都會執行兩次A的建構函式,因此最好將類A設計成單例模式
ok,木有了.
相關文章
- PHP單一檔案入口框架簡析PHP框架
- PHP設計模式(一)簡單工廠模式 (Simple Factory For PHP)PHP設計模式
- 一個很簡單的PHP框架lyuePHP框架
- PHP-RBAC單角色設計-最簡單的設計方案PHP
- 淺析MyBatis(二):手寫一個自己的MyBatis簡單框架MyBatis框架
- 設計一個入口網站網站
- 關於 PHP 框架的簡單思考PHP框架
- PHP簡單計算器PHP
- Netty實戰:設計一個IM框架就這麼簡單!Netty框架
- 【設計和開發一套簡單自動化UI框架】UI框架
- PHP 簡單的幾個設計模式(個人理解)PHP設計模式
- ???又一個管理端框架上線了,設計理念簡單而不簡約框架
- PHP DIY 系列------框架篇:4. 入口檔案PHP框架
- 設計模式(一):簡單工廠設計模式
- Java設計模式(一) 簡單工廠模式不簡單Java設計模式
- 設計模式(一)—— 簡單工廠模式設計模式
- 一個簡簡單單的紅點系統框架框架
- 23種設計模式(一)---簡單工廠設計模式設計模式
- 設計模式學習(一)單例模式補充——單例模式析構設計模式單例
- PHP設計模式(一)—單例模式(Singleton Pattern)PHP設計模式單例
- 【遊戲分析】異界鎖鏈設計簡析遊戲
- phpspider簡單快速上手的php爬蟲框架PHPIDE爬蟲框架
- Just for fun——PHP框架之簡單的路由器(2)PHP框架路由器
- PHP設計模式-- 單列模式PHP設計模式
- PHP設計模式_單例模式PHP設計模式單例
- PHP設計模式——單例模式PHP設計模式單例
- 設計模式第一篇 簡單工廠設計模式設計模式
- ET框架6.0分析二、非同步程式設計框架非同步程式設計
- Golang學習筆記 – 標準庫”net/http”的簡析及自制簡單路由框架Golang筆記HTTP路由框架
- 設計模式系列之一:簡單工廠模式設計模式
- 設計一個簡單的devops系統dev
- 如何設計一個簡單的 C++ ORMC++ORM
- php實現一個簡單的socketPHP
- php實現一個簡單的堆PHP
- 網路程式設計:C++REST SDK簡析程式設計C++REST
- ObjC block簡析(一)OBJBloC
- PHP 設計模式之單例模式PHP設計模式單例
- PHP 設計模式之——單例模式PHP設計模式單例