首頁 >後端開發 >php教程 >php中mvc原理是什麼? php的mvc實作原理的介紹(附程式碼)

php中mvc原理是什麼? php的mvc實作原理的介紹(附程式碼)

不言
不言原創
2018-07-25 15:26:242854瀏覽

php中mvc的有一部分是很好理解的,例如,M是model模型,完成具體的業務邏輯;V是view視圖,負責展示資訊的;C是controller控制器,負責發號施令,把方法進行區分,在前台傳來需求的時候,確定用什麼方法進行處理;那麼php中mvc原理的實作究竟是怎樣的呢?我們具體來用程式碼來深入理解mvc原理。

一、檔案結構 
建立3個資料夾 
controller資料夾存放控制器檔案 
view資料夾存放檢視檔案 
model資料夾存放資料檔 
建立1個index.php 作為唯一入口 
二、控制器 
我們在controller資料夾下建立一個democontroller.php文件,檔案內容如下 

<?php 
class DemoController 
{ 
function index() 
{ 
echo(&#39;hello world&#39;); 
} 
} 
/* End of file democontroller.php */

這個檔案裡面我們只是建立了一個名為DemoController的物件並包含一個index的方法,該方法輸出hello world。下面在index.php中執行DemoController中index方法。 
index.php的程式碼如下 

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

運行index.php,ok如願我們看到了我們久違的hello world。這兩個檔案非常簡單,但也揭示了一點點mvc的本質,透過唯一入口運行我們要運行的控制器。當然controller部分應該是由uri來決定的,那麼我們來改寫一下index.php使他能透過uri來決定運行那個controller。 
index.php改寫程式碼如下: 

<?php 
$c_str=$_GET[&#39;c&#39;]; 
//获取要运行的controller $c_name=$c_str.&#39;Controller&#39;; 
//按照约定url中获取的controller名字不包含Controller,此处补齐。 $c_path=&#39;controller/&#39;.$c_name.&#39;.php&#39;; 
//按照约定controller文件要建立在controller文件夹下,类名要与文件名相同,且文件名要全部小写。 $method=$_GET[&#39;a&#39;]; 
//获取要运行的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的值就可以了。 
這裡有幾個問題要說明一下。 
一、php是動態語言,我們直接可以透過字串new出我們想要的物件和執行我們想要的方法,也就是上面的new $c_name,我們可以理解成new 'DemoController',因為$c_name本身的值就是'DemoController',當然直接new 'DemoController'這麼寫是不行的,其中的'DemoController'字串必須透過一個變數來中轉一下。方法也是一樣的。 
二、我們在url中c的值是demo,也就是說$c_name 的值應該是demoController呀,php不是區分大小寫嗎,這樣也能運作嗎? php區分大小寫這句話不完整,在php中只有變數(前面帶$的)和常數(define定義的)是區分大小寫的,而類別名方,法名甚至一些關鍵字都是不區分大小寫的。而true,false,null等只能全部大寫或全部小寫。當然我們最好在實際編碼過程中區分大小寫。
三、視圖 
我們在前面的controller中只是輸出了一個“hello world”,並沒有達到mvc的效果,下面我將在此基礎上增加視圖功能,相信到這裡大家基本上已經能想到如何新增視圖功能了。對,就是透過萬惡的require或include來實現。 
首先我們在view資料夾下建立一個index.php,隨便寫點什麼(呵呵,我寫的還是hello world)。之後我們改寫一下我們之前的DemoController。程式碼如下:

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

再在瀏覽器中執行一下,看看是不是已經輸出了我們想要的內容了。
接著我們透過controller向view傳遞一些資料看看,程式碼如下:

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

view 資料夾下index.php檔案程式碼如下:

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

相關推薦:

獨孤九賤(8)_php從零開始開發屬於自己的php框架

以上是php中mvc原理是什麼? php的mvc實作原理的介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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