本文目錄一覽:
詳解PHP實現MVC的幾種方法
相信所有習慣了使用MVC來組織自己的項目的人,讓他選擇一個新的項目構架時,一定不會放棄MVC。傳統的面相過程式的開發方式在處理中型以上的應用時,就開始顯得力不從心。即便我們能夠快速的完成需求,但是在需求發生變更後或者進行後期維護的時候,我們會深深地陷入我們早期搭建的陷阱中。什麼是MVC?關於MVC的定義和解釋,可以說多種多樣。我們可以在Wiki或者[2]中找到更為詳盡的解釋,這裡我並不打算,也沒有能力進行深入的講解,從PHP開發的角度來講,MVC可以概括為:視圖(The View):一說到視圖,我們很多人都會想到模板引擎(諸如Smarty等等)。其實就是各種各樣的輸出,比如說html模板和Javascript文件等。模塊(The Model)模塊代表了程序的邏輯,在企業應用中通常稱為業務邏輯層。一般來講,這一層完成的工作是把原始的數據處理成按照我們設計的數據結構存儲的有意義的數據序列,並將這些數據交給視圖去處理。通常情況下, 模塊中會利用一個數據抽象類來進行與數據操作有關的處理。關於MVC的是否適合PHP的爭論也很多,人們不斷的討論MVC是否適合PHP[3],現在也已經有了很多的MVC框架,諸如PHP MVC Frameworks中列出的[4]。那麼,為什麼人們這麼熱衷於MVC,我們為什麼要使用MVC在我們的設計中呢。為什麼用MVC?MVC最早是用來解決桌面GUI的編程問題,最早的MVC框架應該是Sun在1999年提出的Model 2,後來演變成了Struts。MVC帶給人們深刻的印象,但是我們在使用的過程中,卻並沒有認真的想過為什麼使用MVC。在傳統的桌面應用中,一旦Model中有時間發生,我們可以主動的讓View界面進行刷新,從而展示後台發生的變化。而在Web應用中,我們似乎限於傳統的Http的Request/Response的方式,我們似乎沒有辦法讓用戶端進行更新。這一段討論,並不是認為MVC不能夠用來進行WEB應用的開發,而是覺得從某種程度上來說,他還不是最合適的。關於使用MVC的爭論還有很多[1],但是相信所有習慣了使用MVC來組織自己的項目的人,讓他選擇一個新的項目構架時,一定不會放棄MVC。如何PHP實現MVC?下面是一個超級簡單的MVC結構實現,甚至連數據源都用了一個內置的固定數組,雖然簡單,但其實眾多的PHP Framework核心實現的思想應該和這個是差不多的,只不過一些framework提供了更多的方便開發者使用的工具,我也想自己來實現一個PHP的框架,目前正在著手策劃中,也希望自己能夠從框架的開發中學習到更多的PHP設計思想和方法。
php如何實現mvc+l,思路是什麼?
M model 一般是控制資料庫、資源、對象屬性的
V view 視圖,也就是給客戶呈現的UI
C controller 邏輯事務處理器,主要針對客戶端傳來的數據該怎麼處理、輸出,
L Language 國內的人比較少聽說,我們河南新社 經常給國外的客戶做,他們要求前台UI的多數文本,是可以輕鬆修改,或者支持多國語言。這時候,M和C就不能簡單的把文本固定寫到代碼里,而是用$this-language-get[‘text_customer’] 這個變數來替代以前的 “客戶”這樣一個文本;然後建立一個language庫,結構上跟MCV平行。
當然我也聽某群里的「大神」給別人解釋是lib,我是不贊同的,說到底這個大神沒有接觸到國外的業務,而國內小型業務還不要去語言分離或者多語言。如果是是lib,那就是引擎層面的了,跟mvc在結構上不是平行的,不如說 Catalog(MVC)+System(Lib+Engine)
如何用PHP實現自己的MVC
MVC三個字母的含義: M:Model 模型,負責資料庫操作。 V:View 視圖,負責調用Model調取數據,再調用模板,展示出最終效果。 C:Controller 控制器,程序的入口,決定改調用哪個View,並告訴View該做什麼。 下面是一個超級簡單的MVC結構實現: Controller.php include ‘Model.php’; include ‘View.php’; class Controller { private $model = ”; private $view = ”; public function Controller(){ $this-model = new Model(); $this-view = new View(); } public function doAction( $method = ‘defaultMethod’, $params = array() ){ if( empty($method) ){ $this-defaultMethod(); }else if( method_exists($this, $method) ){ call_user_func(array($this, $method), $params); }else{ $this-nonexisting_method(); } } public function link_page($name = ”){ $links = $this-model-getLinks(); $this-view-display($links); $result = $this-model-getResult($name); $this-view-display($result); } public function defaultMethod(){ $this-br(); echo “This is the default method. “; } public function nonexisting_method(){ $this-br(); echo “This is the noexisting method. “; } public function br(){ echo “”; } } $controller = new Controller(); $controller-doAction(‘link_page’, ‘b’); $controller-doAction(); Model.php class Model { private $database = array( “a” = “hello world”, “b” = “ok well done”, “c” = “good bye”, ); //@TODO connect the database //run the query and get the result public function getResult($name){ if( empty($name) ){ return FALSE; } if( in_array($name, array_keys( $this-database ) ) ){ return $this-database[$name]; } } public function getLinks(){ $links = “Link A “; $links.= “Link B “; $links.= “Link C “; return $links; } } View.php class View { public function display($output){ // ob_start(); echo $output; }
什麼是MVC以及PHP怎樣實現MVC
其實你的問題一開始就問錯了,即然你問了,我就隨便說說好了。
MVC 是一種設計風格,並不是一種具體手法。每個人寫代碼都有自己習慣的一種設計風格。MVC 是應用程序開發常用的一種風格,實際上並不適合 PHP,因為 PHP 的工作環境註定了它很難做出像樣的控制器,也就是 Controll 。
MVC 本來的設計風格是:整個系統由一個程序啟動,再根據用戶操作調用各個處理模塊,根據數據結果來決定顯示成什麼樣給用戶看。就像我們平時用的各種程序的主界面。這樣程序員創建好主程序以後,只要把注意力集中在開發各個子功能上就可以了。。
可是 php 大多數情況下工作於 web 環境,有「頁」的概念,每次執行都是一個新的請求。這就註定了很難實現真正的 MVC,因為用戶看到頁面時,PHP 已經執行完了,不可能再切換去調另一個 模型M 和 視圖V 。
目前自稱 MVC 的各種框架。也只不過是用一個程序判斷請求,載入不同的功能塊。只能稱之為「單點入口」,在思路上是「請求相同的部份,而包含不同的部份」。這個入口程序實際上啥也沒做,所以算不上是 MVC。反而 JS 開發的富客戶端更接近一些。由一個 JS 主程序,跟據用戶請求決定調用哪些數據,再把界面改變成什麼樣。
設計風格是前人總結出來的東西,在當前語言,當然環境,當前思維方式下。比較容易繼續思考的一種設計方式。MVC 只不過是其中一種,而且並不是最適合 PHP 的一種。偏偏被炒作得好像標準似的。。
如果你一定要, 就去看一下 「PHP 單點入口實現」吧,已經是比較接近的東西了。如果一次性的控制器也能算控制器的話……
php怎麼實現mvc?
MVC三個字母的含義:
M:Model 模型,負責資料庫操作。
V:View 視圖,負責調用Model調取數據,再調用模板,展示出最終效果。
C:Controller 控制器,程序的入口,決定改調用哪個View,並告訴View該做什麼。
下面是一個超級簡單的MVC結構實現:
Controller.php
include ‘Model.php’;
include ‘View.php’;
class Controller {
private $model = ”;
private $view = ”;
public function Controller(){
$this-model = new Model();
$this-view = new View();
}
public function doAction( $method = ‘defaultMethod’, $params = array() ){
if( empty($method) ){
$this-defaultMethod();
}else if( method_exists($this, $method) ){
call_user_func(array($this, $method), $params);
}else{
$this-nonexisting_method();
}
}
public function link_page($name = ”){
$links = $this-model-getLinks();
$this-view-display($links);
$result = $this-model-getResult($name);
$this-view-display($result);
}
public function defaultMethod(){
$this-br();
echo “This is the default method. “;
}
public function nonexisting_method(){
$this-br();
echo “This is the noexisting method. “;
}
public function br(){
echo “br /”;
}
}
$controller = new Controller();
$controller-doAction(‘link_page’, ‘b’);
$controller-doAction();
Model.php
class Model {
private $database = array(
“a” = “hello world”,
“b” = “ok well done”,
“c” = “good bye”,
);
//@TODO connect the database
//run the query and get the result
public function getResult($name){
if( empty($name) ){
return FALSE;
}
if( in_array($name, array_keys( $this-database ) ) ){
return $this-database[$name];
}
}
public function getLinks(){
$links = “a href=’#’Link A/anbsp;nbsp;”;
$links.= “a href=’#’Link B/anbsp;nbsp;”;
$links.= “a href=’#’Link C/anbsp;nbsp;”;
return $links;
}
}
View.php
class View {
public function display($output){
// ob_start();
echo $output;
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/241089.html