PHP的MVC框架 深刻解析

原文: PHP的MVC框架 深刻解析

本篇先介紹一下php的MVC實現原理,咱們框架的MVC部分也是基於此原理實現的,可是今天的代碼並非框架內的代碼,僅僅爲說明原理
 
 
1、文件結構 
創建3個文件夾 
controller文件夾存放控制器文件 
view文件夾存放視圖文件 
model文件夾存放數據文件 
創建1個index.php 做爲惟一入口 
2、控制器 
咱們在controller文件夾下創建一個democontroller.php文件,文件內容以下 
<?php 
class DemoController 
{ 
function index() 
{ 
echo('hello world'); 
} 
} 
/* End of file democontroller.php */ 

這個文件裏面咱們只是創建了一個名爲DemoController的對象幷包含一個index的方法,該方法輸出hello world。下面在index.php中執行DemoController中index方法。 
index.php的代碼以下 php

<?php 
require('controller/democontroller.php'); 
$controller=new DemoController(); 
$controller->index(); 
/* End of file index.php */ 

運行index.php,ok如願咱們看到了咱們久違的hello world。這兩個文件很是簡單,但也揭示了一點點mvc的本質,經過惟一入口運行咱們要運行的控制器。固然controller部分應該是由uri來決定的,那麼咱們來改寫一下index.php使他能經過uri來決定運行那個controller。 
index.php改寫代碼以下: html

<?php 
$c_str=$_GET['c']; 
//獲取要運行的controller 
$c_name=$c_str.'Controller'; 
//按照約定url中獲取的controller名字不包含Controller,此處補齊。 
$c_path='controller/'.$c_name.'.php'; 
//按照約定controller文件要創建在controller文件夾下,類名要與文件名相同,且文件名要所有小寫。 
$method=$_GET['a']; 
//獲取要運行的action 
require($c_path); 
//加載controller文件 
$controller=new $c_name; 
//實例化controller文件 
$controller->$method(); 
//運行該實例下的action 
/* End of file index.php */ 

在瀏覽器中輸入http://localhost/index.php?c=demo&a=index,獲得了咱們的hello world。固然若是咱們有其餘的controller而且要運行它,只要修改url參數中的c和a的值就能夠了。 
這裏有幾個問題要說明一下。 
1、php是動態語言,咱們直接能夠經過字符串new出咱們想要的對象和運行咱們想要的方法,即上面的new $c_name,咱們能夠理解成new 'DemoController',由於$c_name自己的值就是'DemoController',固然直接new 'DemoController'這麼寫是不行的,其中的'DemoController'字符串必須經過一個變量來中轉一下。方法也是同樣的。 
2、咱們在url中c的值是demo,也就是說$c_name 的值應該是demoController呀,php不是區分大小寫嗎,這樣也能運行嗎?php區分大小寫這句話不完整,在php中只有變量(前面帶$的)和常量(define定義的)是區分大小寫的,而類名方,法名甚至一些關鍵字都是不區分大小寫的。而true,false,null等只能所有大寫或所有小寫。固然咱們最好在實際編碼過程當中區分大小寫。 
3、視圖 
咱們在前面的controller中只是輸出了一個「hello world」,並無達到mvc的效果,下面我將在此基礎上增長視圖功能,相信到這裏你們基本已經能想到如何添加視圖功能了。對,就是經過萬惡的require或者include來實現。 
首先咱們在view文件夾下創建一個index.php,隨便寫點什麼(呵呵,我寫的仍是hello world)。以後咱們改寫一下咱們以前的DemoController。代碼以下: 瀏覽器

<?php 
class DemoController 
{ 
function index() 
{ 
require('view/index.php'); 
} 
} 
/* End of file democontroller.php */ 

 

 
再在瀏覽器中運行一下,看看是否是已經輸出了咱們想要的內容了。 
接着咱們經過controller向view傳遞一些數據看看,代碼以下: mvc

<?php 
class DemoController 
{ 
function index() 
{ 
$data['title']='First Title'; 
$data['list']=array('A','B','C','D'); 
require('view/index.php'); 
} 
} 
/* End of file democontroller.php */ 

view文件夾下index.php文件代碼以下: 框架

<html> 
<head> 
<title>demo</title> 
</head> 
<body> 
<h1><?php echo $data['title'];?></h1> 
<?php 
foreach ($data['list'] as $item) 
{ 
echo $item.'<br>'; 
} 
?> 
</body> 
</html> 

最後 MVC就是 Model View Controller 模型 視圖 控制器 post

相關文章
相關標籤/搜索