Zend?Framework框架等常用php框架中存在的問題
從Zend Framework v0.13版本開始,我就開始學(xué)習(xí)使用Zend Framework。當(dāng)時(shí)公司的一個(gè)項(xiàng)目也恰好用到了Zend Framework。到了0.6的版本之后就再?zèng)]有關(guān)注細(xì)節(jié)了。前些日子聽說Zend 公司將在5月份正式推出Zend Framework,今天特意叫同學(xué)下載下來測(cè)試。
最新版本是0.93的,測(cè)試發(fā)現(xiàn)Zend Framework框架框架越來越傻瓜式了。很多東西都直接封裝在Zend Framework框架的library里面。你只要知道如何調(diào)用就OK拉。和之前的版本詳細(xì)的確有比較大的變化,也增加了比較多功能。
首先,Zend.php不見了,取而代之的是一個(gè)Zend_load類,放在load.php里面。
第二、庫類的加載更加方便了。之前的Zend Framework框架要在子目錄下使用是比較麻煩的?,F(xiàn)在可以直接在子目錄下使用,而且現(xiàn)在也可以不通過mod_rewrite來使用,可以通過http://path/to/site/controller/action來訪問,類似我在《回答PHPCHINA上的幾個(gè)問題:URL映射 》談到的URL映射。
第三、把試圖直接集成到了Controller里面,方便調(diào)用。不過有個(gè)不好的地方就是要按照Zend Framework框架的要求來規(guī)范程序的目錄結(jié)構(gòu)。
另外還增加了很多功能,比如說訪問控制等等。總之,變化很大。今天晚上我也只是大概的看了下。
對(duì)于Zend Framework框架,cakephp等等框架,我覺得大家在學(xué)習(xí)的時(shí)候最好能明白框架的基本原理,所謂“萬變不離其中”??蚣鼙旧砭褪呛芎?jiǎn)單,完全沒有Zend Framework框架等之類這樣復(fù)雜,它們只是把細(xì)節(jié)處理很完善,同時(shí)要做到通用,規(guī)范、功能強(qiáng)大,所以就復(fù)雜了。關(guān)于框架的基本原理,我推薦大家上phpit.net上看一篇文章,關(guān)于如何使用PHP5搭建一個(gè)簡(jiǎn)單的MVC框架的(在喜悅國際村上有翻譯),或者可以看看我的幾篇文章《PHP實(shí)現(xiàn)MVC開發(fā)得最簡(jiǎn)單的方法》系列文章。
之前在chinaunix上有一個(gè)帖子,討論在PHP項(xiàng)目中使用對(duì)象和過程的優(yōu)勢(shì)和不足,討論的非常不錯(cuò)。有支持對(duì)象的,也有認(rèn)為非對(duì)象的開發(fā)更加符合WEB開發(fā)的特點(diǎn),有更好的性能。
我個(gè)人是非常支持對(duì)象式開發(fā)的,尤其在PHP5環(huán)境中(因?yàn)镻HP5的對(duì)象和PHP4的對(duì)象完全不是一回事,這個(gè)看看Zend 引擎就知道了)。但是帖子中說到的幾點(diǎn)也很有道理:比如“OOP的形式卻無故要裝入很多無關(guān)的函數(shù)”。WEB開發(fā)是非常強(qiáng)調(diào)性能的,而PHP是一種解釋性語言,如果include過多的代碼是很影響性能的。這個(gè)問題在Zend Framework,CackePHP,F(xiàn)leaphp和我的框架PHPbean中都存在。
比如說一個(gè)indexController,這里使用Zend Framework做例子。代碼如下:
<?
class indexController extends Zend_Controller_Action {
function init(){
$this->initView();
}
function indexAction(){
//echo 'index/index';
$this->view->title='hello World!';
$this->render();
}
function testAction(){
echo 'index/test';
}
function showAction(){
echo 'index/show';
}
}
?>
比如說我們?cè)L問index/index,那么testAction()和ShowAction()方法的內(nèi)容就完全是多余的。在實(shí)際開發(fā)中按照這種思路,一般是一個(gè)功能模塊對(duì)應(yīng)一個(gè)controller,比如說用戶就對(duì)應(yīng)一個(gè)userController,然后里面有登錄、退出、注冊(cè)、列表、詳細(xì)顯示等等多種方法。當(dāng)一個(gè)項(xiàng)目一大的時(shí)候一個(gè)controller可能就幾K到十幾K。那這樣的模式就非常的不好。
在JAVA的struts中,就采用了完全不同的方式,他是一個(gè)action對(duì)應(yīng)一個(gè)文件。我覺得這是一個(gè)很好的參考方法。
我覺得PHP5的話,使用面對(duì)對(duì)象更加何時(shí)??梢哉f面對(duì)過程能實(shí)現(xiàn)的,面對(duì)對(duì)象都能實(shí)現(xiàn),而且可以實(shí)現(xiàn)的更好。但重要的一點(diǎn)是:采用面對(duì)對(duì)象的思維來使用面對(duì)對(duì)象,而不是用面對(duì)過程的思維來寫面對(duì)對(duì)象的程序!
相關(guān)文章
php實(shí)現(xiàn)遍歷多維數(shù)組的方法
這篇文章主要介紹了php實(shí)現(xiàn)遍歷多維數(shù)組的方法,涉及php針對(duì)多維數(shù)組的遍歷與遞歸操作實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11PHP使用pdo實(shí)現(xiàn)事務(wù)處理操作示例
這篇文章主要介紹了PHP使用pdo實(shí)現(xiàn)事務(wù)處理操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了php基于pdo實(shí)現(xiàn)事務(wù)處理的相關(guān)原理與操作技巧,需要的朋友可以參考下2018-09-09php版微信支付api.mch.weixin.qq.com域名解析慢原因與解決方法
這篇文章主要介紹了php版微信支付api.mch.weixin.qq.com域名解析慢原因與解決方法,詳細(xì)分析了微信支付api.mch.weixin.qq.com域名解析慢原因與使用curl_easy_setopt指定ipv4解決ipv6解析問題的相關(guān)技巧,需要的朋友可以參考下2016-10-10PHP fopen()和 file_get_contents()應(yīng)用與差異介紹
這篇文章主要介紹了PHP fopen()和 file_get_contents()應(yīng)用與差異,需要的朋友可以參考下2014-03-03- Smarty是一個(gè)php模板引擎,它分開了邏輯程序和外在的內(nèi)容,提供了一種易于管理的方法. Smarty要求web服務(wù)器運(yùn)行php4.0.6和以上版本. smarty安裝需要smarty庫文件??梢匀ス俜骄W(wǎng)站http://smarty.php.net下載。 網(wǎng)上講了很多安裝的教程,但是我都沒有成功,所以直接把整個(gè)目錄名改為smarty直接復(fù)制到了網(wǎng)站所在的目錄下,然后打開http://網(wǎng)站路徑/smarty/demo/index.php,顯示正常,應(yīng)該算是安裝成功了。2008-03-03
PHP Session條件競(jìng)爭(zhēng)超詳細(xì)講解
這篇文章主要介紹了PHP Session條件競(jìng)爭(zhēng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12