Zend Framework是一個(gè)php開源框架,可用于開發(fā)web應(yīng)用程序和服務(wù)。Zend使用100%面向?qū)ο蟠a和利用大多數(shù)PHP5.3的新特性,即名稱空間、延遲靜態(tài)綁定,lambda函數(shù)和閉包。Zend大量應(yīng)用了PHP5中面向?qū)ο蟮男绿卣魅缃涌凇惓?、抽象類等等,這些東西讓Zend 具有高度的模塊化和靈活性。還有Zend的組成結(jié)構(gòu)是獨(dú)一無(wú)二的,每個(gè)組件被設(shè)計(jì)與其他部件數(shù)的依賴關(guān)系。同時(shí)Zend也是遵循SOLID面向?qū)ο蟮脑O(shè)計(jì)原則,這樣的松耦合結(jié)構(gòu)可以讓開發(fā)人員使用他們想要的任何部件。
Zend Framework安裝篇:
1、解壓下載的壓縮包。
2、將其庫(kù)類放到項(xiàng)目的根目錄中;如:/var/www/nbaplayers/library/Zend
3、創(chuàng)建項(xiàng)目的基本目錄:
4、實(shí)例:
4.1、新建文件 /var/www/nbaplayers/index.php:
error_reporting(E_ALL|E_STRICT);//語(yǔ)句打開了錯(cuò)誤輸出開關(guān),用于代碼調(diào)試,正式發(fā)布的代碼應(yīng)該屏蔽錯(cuò)誤信息。
date_default_timezone_set('Asia/Shanghai');//設(shè)定時(shí)區(qū)
set_include_path('.'.
PATH_SEPARATOR.'./library'. //用于設(shè)定類庫(kù)的包含路徑,ZF的系統(tǒng)類庫(kù)就是在這里指定的。
PATH_SEPARATOR.'application/models/'. //包含自定義類文件。
PATH_SEPARATOR. get_include_path());
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload(); //自動(dòng)加載類
$frontController = Zend_Controller_Front::getInstance();//取得Zend_Controller_Front類實(shí)例
$frontController->setControllerDirectory (array(
"default" => 'application/controllers',
)); // 指定一組控制器文件路徑,參數(shù)是數(shù)組。設(shè)置前端控制器,主要是讓控制器知道我們的的控制器類在哪里
$frontController->throwExceptions(true);//讓前端控制器拋出所有的異常。 默認(rèn)情況下,前端控制器將捕獲這些異常并將其人傳遞到 ErrorController 控制器,在開發(fā)過(guò)程,這樣錯(cuò)誤容易發(fā)現(xiàn)。但在實(shí)際運(yùn)行中,不能將這些錯(cuò)誤直接顯示給前端用戶。
$frontController->setParam('noViewRenderer', true);// 指明不使用視圖,false 是默認(rèn)值。
$frontController->setParam('noErrorHandler', false);
$frontController->dispatch(); //程序執(zhí)行分發(fā)
?>
注意:如果你用的ZF是之前的版本的話,會(huì)出現(xiàn)以下提示:
Notice: Zend_Loader::Zend_Loader::registerAutoload is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead in /usr/local/zend/share/ZendFramework/library/Zend/Loader.php on line 207
那么將:
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload(); // 自動(dòng)加載類
修改為:
require_once 'Zend/Loader/Autoloader.php'; // 自動(dòng)加載類
$loader = Zend_Loader_Autoloader::getInstance();
$loader->setFallbackAutoloader(true);
$loader->suppressNotFoundWarnings(false);
就好了。具體可以看看ZF的官方說(shuō)明。在Autoloader.php文件中,有一方法:
protected function __construct()
{
spl_autoload_register(array(__CLASS__, 'autoload'));
$this->_internalAutoloader = array($this, '_autoload');
}
用來(lái)實(shí)現(xiàn)自動(dòng)加載類文件。
* spl_autoload_register — Register given function as __autoload() implementation
//設(shè)置對(duì)象的自動(dòng)載入
4.2、新建文件 /var/www/nbaplayers/application/Controllers/IndexController.php:
class IndexController extends Zend_Controller_Action
{
function indexAction()
{
echo "Hello ZendFramework!";
}
}
?>
4.3 新建文件 /var/www/nbaplayers/.htaccess
RewriteEngine on
RewriteRule !/.(js|ico|gif|jpg|png|css)$ index.php
以上是說(shuō),啟動(dòng) RewriteEngine 引擎,并把對(duì)除js、ico、gif、jpg、png、css等圖片、js腳本、css的請(qǐng)求外都得經(jīng)過(guò)index.php文件。當(dāng)然上面的實(shí)例不創(chuàng)建這個(gè)也可以正常運(yùn)行,但如果你使用ZF開發(fā)實(shí)際的項(xiàng)目,這就是必須的了。
4.4、運(yùn)行:在瀏覽器地址欄輸入http://www.domain.com回車,瀏覽器將顯示結(jié)果:
Hello ZendFramework!
OK 完成!
php框架哪個(gè)好用?
在國(guó)外,比較火的應(yīng)該是Zend Framework,畢竟比較官方,另外其開發(fā)團(tuán)隊(duì)比較強(qiáng)大,人多力量大啊。在國(guó)內(nèi),做得比較成功的是ThinkPHP,但是其學(xué)習(xí)難度要高于FleaPHP,對(duì)于進(jìn)度要求緊迫的項(xiàng)目,F(xiàn)leaPHP非常適合。因?yàn)槠湟讓W(xué),這大大降低了很多學(xué)習(xí)成本,團(tuán)隊(duì)很快就能掌握如何使用它。就項(xiàng)目這塊,根據(jù)很多人經(jīng)驗(yàn),symfony、Zend Framework比較適合大型項(xiàng)目。CakePHP、CodeIgniter比較適合中小型項(xiàng)目。FleaPHP、ThinkPHP比較適合中型項(xiàng)目。總之,適合自己的才是最好的!