怎麼一步步編寫簡單的PHP的Framework(一)

     自從入職天貓以後,都沒怎麼時間看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應用呢?

        下次再講,請繼續關注!!!!

相關文章
相關標籤/搜索