搜尋
首頁php教程php手册一步步编写PHP的Framework(一)

 

      框架这个概念可能一开始就吓坏了很多PHP的Coder,其实你只要把一个Framework想明白了,其实也没啥,只是别人功能更复杂,细节考虑的更多,代码质量更高。

       框架最重要的一个文件为入口文件,基本上相当于一个总控开关,所有的请求都需要经过这个文件:

1

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

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

2 class Test_IndexModel extends Tp_Model {

3     public function test() {

4         return 'test';

5     }

6 }

    原理和控制器一样,也是继承框架的类,然后自定义方法,这个地方的方法名没有限制,可以随意。

     那么编写模型之后怎么在控制器中调用呢,其实方法就是在控制器中实例化这个模型类,然后调用相应的方法即可,所以修改刚才这个控制器的类:

1

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的文件中使用,这样对于代码分离很不好。

    如果你对标签库没有概念,那么你直接看下面的代码吧!

1

2     

3         test

4     

5     

6         

7     

8

    这是一段没有什么难度的代码,唯一的难度可能就是这个print标签,这个标签是框架定义的,它的功能很简单,就是打印一个字符串,你可能觉得这样没什么意义,因为我使用PHP代码也可以很轻易的完成这个功能,但是你想像一下一个做前端的为什么还需要懂PHP呢,如果使用标签库,那么前端开发人员就可以像使用HTML标签一样操作数据了。

     我们知道所有的请求都必须要通过控制器,所以外部是无法直接访问这个视图文件的,所以又需要修改控制器的代码了!!!

1

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应用呢?

        下次再讲,请继续关注!!!!



陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),