2023年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
run()
public
function
__destruct()
}
功能類,處理分發來的請求(超級類將url分解獲得資訊,動態new此class,並將資訊交給此class處理)
b.php<?php
class
b}
如果類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}
那麼結果是這樣的:
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的建構函式會怎樣?:
<?phpclass b extends
a
public
function
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
}
如果這樣套到單一入口框架中就不行了.
別急,還有:
結論5:因為每次執行子類b都會執行兩次a的建構函式,因此最好將類a設計成單例模式
ok,木有了.
summer php 框架
轉php單一入口框架設計
說到php單入口模式,很快想到關於php的一些框架,zend,thinkphp,qeephp,還有cakephp 等,它們都採用了統一的入口,可以根據不同的需要,分前台入口後台入口或者其他操作許可權入口,這樣的設計模式優點很明顯,比如。許可權控制,url重寫,結 合mvc清晰地目錄結構。這些都是單入...
PHP框架開發教程 四 單一入口
多入口在以前的框架中是存在的,通常可以歸結為 每個模組乙個入口檔案.通過 在入口檔案中配置不同的引數,引導框架 執行不同的路徑.單一入口模式 更為 簡潔,模組名稱只作為乙個入口引數,框架通過判斷模組名稱執行相應的 程式.單一 入口的優點極為明顯 整個框架的流程更為清晰.如果需要在框架層面 增加一些功...
PHP微型框架設計
一 框架整體分析 在實現乙個框架之前,我們需要了解這個框架應該達到乙個怎樣的效果,按照傳統框架的思路,大致可以總結出以下這麼幾條 1.實現mvc架構,將控制 邏輯 檢視層進行分離。2.封裝各種函式及功能模組,實現一處編寫,多處呼叫,減少 冗餘。3.便於擴充套件,可方便的引入外部擴充套件庫,對自身框架...