一步步編寫PHP的Framework(一)

來源:互聯網
上載者:User

 

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

       架構最重要的一個檔案為入口檔案,基本上相當於一個總控開關,所有的請求都需要經過這個檔案:

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 }

    原理和控制器一樣,也是繼承架構的類,然後自訂方法,這個地方的方法名沒有限制,可以隨意。

     那麼編寫模型之後怎麼在控制器中調用呢,其實方法就是在控制器中執行個體化這個模型類,然後調用相應的方法即可,所以修改剛才這個控制器的類:

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語句?

      那是因為架構幫你做完了這一切,當然,架構不是萬能的,當你比較熟悉之後,也可以選擇不使用自動匯入。

      剛才我們所做的一切都沒有View,那麼怎麼編寫View呢,實際上就是一個HTML檔案,架構在View這一層一般是實現標籤庫,標籤庫幫你完成一些原來需要用PHP代碼才能完成的事情,比如迴圈遍曆,沒有標籤庫可能你就只能在這個View的檔案中使用<?php foreach(.....) ?>,這樣對於代碼分離很不好。

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

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。

       剛才是使用架構實現了一個MVC的應用,那麼怎麼不使用架構來構建一個MVC應用呢?

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



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.