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