從Zend Framework v0.13版本開始,我就開始學習使用Zend Framework。當時公司的一個專案也剛好用到了Zend Framework。到了0.6的版本之後就再沒有註意細節了。前一天聽說Zend 公司將在5月正式推出Zend Framework,今天刻意叫同學下載下來測試。
最新版本是0.93的,測試發現Zf框架越來越傻瓜式了。很多東西都直接封裝在ZF的library裡面。你只要知道如何呼叫就OK拉。和之前的版本詳細的確有比較大的變化,也增加了比較多功能。
首先,Zend.php不見了,取而代之的是一個Zend_load類,放在load.php裡面。
第二、庫類別的載入更方便了。之前的ZF要在子目錄下使用是比較麻煩的。現在可以直接在子目錄下使用,現在也可以不透過mod_rewrite來使用,可以透過http://path/to/site/controller/action來訪問,類似我在《回答PHPCHINA上的幾個問題:URL映射 》談到的URL映射。
第三、把試圖直接整合到了Controller裡面,方便呼叫。不過有個不好的地方就是要依照ZF的要求來規範程式的目錄結構。
另外增加了許多功能,例如存取控制等等。總之,變化很大。今天晚上我也只是大概的看了下。
對於ZF,cakephp等等框架,我覺得大家在學習的時候最好能明白框架的基本原理,所謂「萬變不離其中」。框架本身就是很簡單,完全沒有ZF等之類這樣複雜,它們只是把細節處理很完善,同時要做到通用,規範、功能強大,所以就複雜了。關於框架的基本原理,我推薦大家上phpit.net上看一篇文章,關於如何使用PHP5搭建一個簡單的MVC框架的(在喜悅國際村上有翻譯),或者可以看看我的幾篇文章《PHP實作MVC開發得最簡單的方法》系列文章。
之前在chinaunix上有一個帖子,討論在PHP項目中使用物件和過程的優勢和不足,討論的非常不錯。有支援對象的,也有認為非物件的開發更符合WEB開發的特點,有更好的效能。
我個人是非常支持物件式開發的,尤其在PHP5環境(因為PHP5的物件和PHP4的物件完全不是一回事,這個看看Zend 引擎就知道了)。但貼文中說到的幾點也很有道理:像是「OOP的形式卻無故要裝入很多無關的函數」。WEB開發是非常強調效能的,而PHP是一種解釋性語言,如果include過多的程式碼是很影響效能的。這個問題在Zend Framework,CackePHP,Fleaphp和我的框架PHPbean都存在。
比如說一個indexController,這裡用Zend Framework做範例。代碼如下:
class indexController extends Zend_Controller_Action {
function init(){ 🎜> function indexAction(){
//echo 'index/index';
$this->view->title='hello World!';
testAction(){
echo 'index/test';
}
function show }
}
?>
比方說我們造訪index/index,那麼testAction()和ShowAction()方法的內容就完全是多餘的。在實際開發中依照這個思路,一般都是一個功能模組對應一個controller,比如說使用者就對應一個userController,然後裡面有登入、登出、註冊、列表、詳細顯示等等多種方法。當一個專案一大的時候一個controller可能就幾K到十幾K。那這樣的模式就非常的不好。
在JAVA的struts中,就採用了完全不同的方式,他是一個action對應一個檔案。我覺得這是一個很好的參考方法。
我覺得PHP5的話,使用面對對象更有何時。可以說面對過程能實現的,面對物件都能實現,而且可以實現的更好。但重要的一點是:採用面對對象的思考來使用面對對象,而不是用面對過程的思維來寫面對對象的程序!
以上就介紹了 ZF等常用php框架中存在的問題,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。