用PHP寫乙個框架的思路

2022-04-06 09:55:00 字數 1512 閱讀 1642

在php的論壇中總是聽到有人對php的oop支援說三道四的,說這有缺陷,那裡不足,但是都拿不出實際的例子。原來說過要和大家說說這事,但是一直很忙,現在算是抽了些時間了,所以把我剛剛做過的乙個專案的框架拿出來和大家**一下。這個專案99%的**是用oop方式編寫的,感覺php對於oop支援非常好,不是一般的好,是非常的好。有由於專案本身是乙個商業專案所以源**不好公布出來,但是基本框架還是可以說一說的,而且經過簡化的例子更容易理解一些。如果你對php中的oop還不太了解,還是就此打住吧,先去看看手冊,或者基礎讀物再來看也不遲,反正這個是貼子沒有長腿也跑不了。

長話短說,立刻開始吧。我這裡會用到乙個簡單的例子,只有乙個半的功能。乙個是向瀏覽器傳送一句"hello, i can say oop in php world!",另外半個功能是從資料庫中進行乙個查詢然後輸出到瀏覽器,說它是半個功能是因為只是作為乙個例子講講沒有實際的資料庫操作。

首先從我的第乙個檔案index.php 開始介紹吧。我的index.php檔案是這樣的:

run();

?>

這個就是全部了,雖然只有4行,但是如果用oop的方式寫這個應該就夠了吧。

有一點經驗的哥們會發現這裡只用到了乙個application 物件,那麼一定很想知道這個物件究竟長什麼樣呢?我們繼續看看class.application.php 這個檔案的內部。從以上的**中我們知道她應該至少包含兩個方法——application()和run()。所以大體上應該長成這樣:

現在就算知道application 是什麼樣,它好像也沒有辦法完成我們預先設定的功能呀? 所以還要介紹一下如何執行這個程式,在我的結構中所有的頁面都是通過index.php和乙個action引數進行訪問的例如第乙個功能應該這樣訪問index.php?action=hellopage,而第二個功能則是通過index.php?action=databasepage進行訪問。這樣的結構大家也許並不陌生吧。所以index.php 頁面應當知道傳進來的 action 引數是什麼,也就是說application物件應當知道 這個action 引數是什麼。所以我們需要給application增加乙個方法 getaction()來獲得action引數。既然知道action,知道了要做什麼,那麼方法 run()也就有知道如何去run了。

同時我還可以把(完成功能的)每乙個頁面作為乙個物件來看待,所以我應該至少還需要兩個類 :class hellopage 和 class databasepage 。由於這兩個物件最終都是向瀏覽器傳送頁面所以把他們共同的部分提出來作為他們的父類

class page

以下是三個類檔案的內容

class.page.php

其中這個show方法應該是所有頁面物件都具有的方法,只是在實現上有所不同。

class.hellopage.php

;class.databasepage.php

;同時我們還遵守這樣的一條規則:action的值和呼叫的頁面類的名稱保持一致,例如當action=hellopage的時候程式就知道需要初始化乙個hellopage的物件,有了這樣的規則和以上的幾個檔案我們就可以將 application 類改進成這樣。

自己寫乙個框架

自己寫乙個框架 單入口mvc 類 庫 屬於擴充套件 乙個好的配置檔案和讀取功能 db介面 dispather.php index.php dispather 分析controller action 根據分析controller action 動態載入 引入乙個自動載入機制 controller.ph...

怎麼用php寫乙個日誌功能的函式

我們要寫乙個寫日誌的函式,首先需要了解需求,我們一般怎麼用日誌函式呢?例如,程式執行到某一步,我希望把這個變數 位址 user address的值列印到日誌,我們希望日誌裡是這麼寫的 xx xx xx xx xx user address 上海市楊浦區 xx 然後每一條日誌都要換行,都有日期時間,假...

寫乙個ExtJs的頁面框架

今天試著寫了乙個extjs的頁面展現,就是乙個大框,沒什麼功能,供以後在應用的時候作為參考,頁面的結構是 左邊乙個樹,右面乙個tabpanel,tabpanel中通過iframe套了乙個grid,首先是index頁面 index頁面中定義乙個 index.js 如下 ext.onready func...