一步步編寫PHP的Framework(一)

框架這個概念可能一開始就嚇壞了不少PHP的Coder,其實你只要把一個Framework想明白了,其實也沒啥,只是別人功能更復雜,細節考慮的更多,代碼質量更高。php

       框架最重要的一個文件爲入口文件,基本上至關於一個總控開關,全部的請求都須要通過這個文件:html

1	<?php
2	define('APP_PATH',dirname(__FILE__).'/..'); //應用路徑
3	include APP_PATH.'/Library/Toper/Core/FrontController.class.php';//導入前端控制器
4	$frontController = Tp_FrontController::getInstance();
5	$frontController->run();

       這個文件能夠只作一件事情,那就是將控制權交給框架。前端

      你們都知道,一個MVC的應用,全部的請求都必須通過控制器,因此下面咱們來編寫一個比較簡單的控制器:瀏覽器

1	<?php
2	class Test_IndexController extends Tp_Controller {
3	    public function indexAction() {
4	        echo 'a';
5	    }
6	}

     這個類只須要繼承自Tp_Controller便可,Tp_Controller是Toper的控制器的基類,只要你繼承它,你就可使用框架幫你寫好的一系列方法,這樣就能夠大大減小你本身的工做量了,而且按照規範,函數名也是有意義的,如剛纔寫的這個函數表明的意義就是訪問Test模塊IndexContrller這個控制器下面的index這個Action。框架

      那麼如何使用模型呢?實際上很是簡單。函數

1	<?php
2	class Test_IndexModel extends Tp_Model {
3	    public function test() {
4	        return 'test';
5	    }
6	}


     那麼編寫模型以後怎麼在控制器中調用呢,其實方法就是在控制器中實例化這個模型類,而後調用相應的方法便可,因此修改剛纔這個控制器的類:    原理和控制器同樣,也是繼承框架的類,而後自定義方法,這個地方的方法名沒有限制,能夠隨意。this

1	<?php
2	class Test_IndexController extends Tp_Controller {
3	    public function indexAction() {
4	        $model = new Test_IndexModel();
5	        echo $model->test();
6	    }
7	}

     爲何沒有include語句?命令行

      那是由於框架幫你作完了這一切,固然,框架不是萬能的,當你比較熟悉以後,也能夠選擇不使用自動導入。code

      剛纔咱們所作的一切都沒有View,那麼怎麼編寫View呢,實際上就是一個HTML文件,框架在View這一層通常是實現標籤庫,標籤庫幫你完成一些原來須要用PHP代碼才能完成的事情,好比循環遍歷,沒有標籤庫可能你就只能在這個View的文件中使用<?php foreach(.....) ?>,這樣對於代碼分離很很差。htm

    若是你對標籤庫沒有概念,那麼你直接看下面的代碼吧!

1	<html>
2	    <head>
3	        <title>test</title>
4	    </head>
5	    <body>
6	        <print name = "Hello world!" type = "str" />
7	    </body>
8	</html>

    這是一段沒有什麼難度的代碼,惟一的難度可能就是這個print標籤,這個標籤是框架定義的,它的功能很簡單,就是打印一個字符串,你可能以爲這樣沒什麼意義,由於我使用PHP代碼也能夠很輕易的完成這個功能,可是你想像一下一個作前端的爲何還須要懂PHP呢,若是使用標籤庫,那麼前端開發人員就能夠像使用HTML標籤同樣操做數據了。

     咱們知道全部的請求都必需要經過控制器,因此外部是沒法直接訪問這個視圖文件的,因此又須要修改控制器的代碼了!!!

1	<?php
2	class Test_IndexController extends Tp_Controller {
3	    public function indexAction() {
4	        $model = new Test_IndexModel();
5	        echo $model->test();
6	        $this->_display('Test.test');
7	    }
8	}

        若是你學過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。

相關文章
相關標籤/搜索