PHP 單一入口框架設計簡析

2022-03-13 19:23:39 字數 2047 閱讀 6783

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的建構函式會怎樣?:

<?php

class 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.便於擴充套件,可方便的引入外部擴充套件庫,對自身框架...