Thinkphp,qeephp,cakephp,zendframework,symfony 對比_PHP教程

來源:互聯網
上載者:User
demon認為一個優秀的架構並不是完成僅有的幾個業務流,它應該是可擴充的,
是富有的,是集合,是離散。簡單說它是萬物的矛盾體,既游離又彙總。

體積切入:

架構 體積cake_1.2.2.81202.01MBqeephp-2.1.2116993KBThinkPHP 1.5947KBZendFramework-1.7.8-minimal16.1MBsymfony 1.2.511.1MB

備忘:以上都是刪除不必要的檔案比如doc,test等檔案後的最小體積

粗略的認為:

國內架構普遍比較小,國外普遍比較大-。。-在這裡不能簡單的認為體積小為好。


目錄結構:

thinkphp

左邊是thinkphp 的目錄結構,
demon粗略的看了看:
common下放了運行時,
函數庫,通用性的檔案 lang估計是核心內部的語言
lib/org下是一些常用工具: date,io,net,rbac,text等 lib/think下為核心,
主攻mvc流程 plugin下為適配外掛程式
總結: 實在是太小了,
一眼便看穿了全部
demon從初學者的角度來分析thinkphp的流程:
初始化載入必要的檔案,common,core下的幾個類,
就可以調用new app(),
然後嗲用init運行了。
猜測app裡執行個體化diapatcher然後調用類似run的方法,
開始動作routing。

qeephp

粗看qeephp的目錄結構,
給人非常舒服,
層次很清晰,
每一個檔案夾對應某個功能域。
並且每個檔案下都有與之對應的exception.
command命令列捷徑 特別要指出,
extend下的behavior是在模型上捆綁行為的。
可以說是decorate模式。
在qeephp中可見運用了一些設計模式來滿足可擴充性,
單一職責。
qeephp的啟動方式。。
一時還找不出來。
這是由於單一職責的好處。
參考了官方的文檔:
看:
// 獲得應用程式啟動資訊
$app_config = require(dirname(__FILE__) . '/../config/boot.php');
// 根據啟動資訊中的設定載入 QeePHP 架構和應用程式物件
require $app_config['QEEPHP_DIR'] . '/library/q.php';
require $app_config['APP_DIR'] . '/myapp.php';
// 構造應用程式物件,並啟動 MVC 模式
echo MyApp::instance($app_config)->dispatching();
很舒服。。。
不過精簡的還不夠,
特別是myapp.php和以下 MyApp::instance($app_config)->dispatching();
的關係很不協調。 (我想作者的意圖是想多入口的多應用程式以及部署模式,
但入口並不應該感知檔案名稱,而是感知索引)
比如:
// 根據啟動資訊中的設定載入 QeePHP 架構和應用程式物件
require $app_config['QEEPHP_DIR'] . '/library/q.php';
// 獲得應用程式啟動資訊
$app_config = qee_App::getConfiguration("myapp");
// 構造應用程式物件,
並啟動 MVC 模式
qee_App::createInstance($app_config)->dispatching();
如此不是更好。
沒有煩瑣的手動載入,
只要知道要運行哪個app名字就可以了
總結:
可以說qeephp從目前的目錄結構看,
是可以研究一下的。
當然還存在一些問題。
綜合看qeephp在目錄結構上比thinkphp好

cakephp

cake的目錄很有意思:
一個空的app項目目錄。
然後核心就4個cache,controller,model,view 真是mvc啊。。。
很簡單,太簡單,
cakephp提供cli 來初始化一個基本的 mvc application。
所以至於啟動方式也類似於qeephp。

zend

zend不得不用縮圖了,
實在太多太全太大。
zend明顯的很清楚,
比qeephp,symfony都清楚,
並且很全。
特點就是檔案夾可以單一的完成某些任務,
這使得所有類都可以單獨剝離出來,
外頭的php檔案是實現封裝,
而對應的directory為類包含的類,
運用組合模式結合起來。
zend的啟動方式不熟悉。
但應該不會差。

symfony

symfony 的結構也相對清晰,
但其粒度比zend更細膩。
它將controller,response,request 都分開。
但從整體行來說遜色於zend,
不夠全,
也不夠離散。
symfony的某些組件,
存在一定的依賴性。

總結:

評判標準:

1。目錄層次是否清晰

2。目錄傳達的意思和其內在的類是否一致‘

3。目錄結構一致性

從目錄上來說zend>symfony>qeephp>cakephp>thinkphp

類圖

thinkphp

核心core類圖,我們可以看到單根繼承,從base派生。think中幾乎所有的類都是從base上繼承

util的類圖,看都是從base上下來。我用一個簡單的層次關係來描述thinkphp的結構

以base為中心,向外輻射的結構。

qeephp

看在ea中根的類圖就一個q,多舒服,並且在其他類中,他並沒有為了模式而模式。

看圖:

看到嗎,沒有任何關係的單類,並且引如context的類,管理應用程式上下文,這是個很好的設計思想。因該是借鑒symfony的吧。後面會分析。

qeephp的類層次,可以說是游離的,分散的。

symfony

類圖產生就用了8分鐘,可以見得其龐大

去掉orm層的外掛程式(symfony的mvc,m由外掛外掛程式支援,propel或者doctince)

應用外掛程式的機制symfony可以靈活的更改m。

一樣是沒有關聯的單類,通過派生的方式實現對不同設定檔的讀取。

symfony在很多時候都是運用了派生。其配置的驅動由sfcontext來統一驅動,sfconfig統一管理。很好的架構,單一職責,讓多個類在sfcontext的驅動下,完成mvc的業務流。

而sfcontext所在的位置為util,基礎套間,也就是說,如果不需要運行mvc模式,那隻需要不調用sfcontext的dispatcher就行鳥,創造一個運行上下文,mvc還是命令列模式,取決於你調用的方法。

幽雅簡單,不亂。

一個context類管理了所有mvc下需要用到的組件。

zend

同樣的幽雅簡單,也是用一個上下文來管理一切。

zend比較大,圖就不發了。

cakephp

cakephp每什麼好說的。實在太弱小了。demon把它歸類到thinkphp,qeephp,cakephp一檔去。

時間緊迫,用了3小時才整出初步的對比。當然最適合自己的就是最好的。

symfony,zend適合demon,那麼各位看客就自己拿捏吧。

總結:

http://www.bkjia.com/PHPjc/735141.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/735141.htmlTechArticledemon認為一個優秀的架構並不是完成僅有的幾個業務流,它應該是可擴充的, 是富有的,是集合,是離散。簡單說它是萬物的矛盾體,既遊...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.