自從入職天貓以後,都沒怎麼時間看oschina了,趁着這段時間參加培訓,忙裏偷閒,寫幾篇日誌吧。 php
框架這個概念可能一開始就嚇壞了不少PHP的Coder,其實你只要把一個Framework想明白了,其實也沒啥,只是別人功能更復雜,細節考慮的更多,代碼質量更高。 html
首先以我本身寫的Toper爲例講解一下通常框架的流程(若是你們對我這個不成熟的框架有興趣,能夠在oschina裏面搜索一下toper,也能夠點擊這裏打開): 前端
框架最重要的一個文件爲入口文件,基本上至關於一個總控開關,全部的請求都須要通過這個文件: 瀏覽器
<?php define('APP_PATH',dirname(__FILE__).'/..'); //應用路徑 include APP_PATH.'/Library/Toper/Core/FrontController.class.php';//導入前端控制器 $frontController = Tp_FrontController::getInstance(); $frontController->run();這個文件能夠只作一件事情,那就是將控制權交給框架。
你們都知道,一個MVC的應用,全部的請求都必須通過控制器,因此下面咱們來編寫一個比較簡單的控制器: 框架
<?php class Test_IndexController extends Tp_Controller { public function indexAction() { echo 'a'; } }這個類只須要繼承自Tp_Controller便可,Tp_Controller是Toper的控制器的基類,只要你繼承它,你就可使用框架幫你寫好的一系列方法,這樣就能夠大大減小你本身的工做量了,而且按照規範,函數名也是有意義的,如剛纔寫的這個函數表明的意義就是訪問Test模塊IndexContrller這個控制器下面的index這個Action。
那麼如何使用模型呢?實際上很是簡單。 函數
<?php class Test_IndexModel extends Tp_Model { public function test() { return 'test'; } }
原理和控制器同樣,也是繼承框架的類,而後自定義方法,這個地方的方法名沒有限制,能夠隨意。 this
那麼編寫模型以後怎麼在控制器中調用呢,其實方法就是在控制器中實例化這個模型類,而後調用相應的方法便可,因此修改剛纔這個控制器的類: .net
<?php class Test_IndexController extends Tp_Controller { public function indexAction() { $model = new Test_IndexModel(); echo $model->test(); } }爲何沒有include語句?
那是由於框架幫你作完了這一切,固然,框架不是萬能的,當你比較熟悉以後,也能夠選擇不使用自動導入。 命令行
剛纔咱們所作的一切都沒有View,那麼怎麼編寫View呢,實際上就是一個HTML文件,框架在View這一層通常是實現標籤庫,標籤庫幫你完成一些原來須要用PHP代碼才能完成的事情,好比循環遍歷,沒有標籤庫可能你就只能在這個View的文件中使用<?php foreach(.....) ?>,這樣對於代碼分離很很差。 日誌
若是你對標籤庫沒有概念,那麼你直接看下面的代碼吧!
<html> <head> <title>test</title> </head> <body> <print name = "Hello world!" type = "str" /> </body> </html>
這是一段沒有什麼難度的代碼,惟一的難度可能就是這個print標籤,這個標籤是框架定義的,它的功能很簡單,就是打印一個字符串,你可能以爲這樣沒什麼意義,由於我使用PHP代碼也能夠很輕易的完成這個功能,可是你想像一下一個作前端的爲何還須要懂PHP呢,若是使用標籤庫,那麼前端開發人員就能夠像使用HTML標籤同樣操做數據了。
咱們知道全部的請求都必需要經過控制器,因此外部是沒法直接訪問這個視圖文件的,因此又須要修改控制器的代碼了!!!
<?php class Test_IndexController extends Tp_Controller { public function indexAction() { $model = new Test_IndexModel(); echo $model->test(); $this->_display('Test.test'); } }
若是你學過smarty,你可能對display方法很熟悉,實際上這個函數的功能就是顯示一個模板文件!!!
好了,一個基本的MVC應用就搭起來了,不是很難吧!!!
如何查看效果呢,有兩種方式:
1.CGI:
打開瀏覽器,瀏覽器訪問時,若是您的域名是:localhost/testframework,那麼您可使用localhost/testframework/Public/index.php/Test/Index/index來訪問,若是您設置了虛擬主機,如www.a.com,那麼只須要使用www.a.com/Test/Index/index就能夠訪問了;
2.CLI:
經過命令行直接執行PHP腳本時,在Public目錄下面使用php index.php m:test c:Index a:index。
這個例子的代碼點此下載
剛纔是使用框架實現了一個MVC的應用,那麼怎麼不使用框架來構建一個MVC應用呢?
下次再講,請繼續關注!!!!