mvc與php
A. 基於MVC的php框架的疑問,每執行一次動作,是不是都要新建一次控制器對象啊
一般的PHP框架都是只生成一次控制器對象的,在當次請求完成之前是不會再重復去新建這個對象的,這個可以去看一下zend 的php框架的實現。其實php本身的實現方式就是絕對的單例,前後端一次交互動作完成則後端所有數據、環境都歸零了的,所以在這個上面不用考慮太多,只要保證資料庫連接那層是絕對的單例就OK了,不然,若是在某次交互請求過程中後端需要多次讀寫庫操作的話就會多次建立庫連接,這樣就不好了,嚴重浪費資源。
B. 什麼是MVC以及PHP怎樣實現MVC
其實你的問題一開始就問錯了,即然你問了,我就隨便說說好了。
MVC 是一種設計風格,並不是一種具體手法。每個人寫代碼都有自己習慣的一種設計風格。MVC 是應用程序開發常用的一種風格,實際上並不適合 PHP,因為 PHP 的工作環境註定了它很難做出像樣的控制器,也就是 Controll 。
MVC 本來的設計風格是:整個系統由一個程序啟動,再根據用戶操作調用各個處理模塊,根據數據結果來決定顯示成什麼樣給用戶看。就像我們平時用的各種程序的主界面。這樣程序員創建好主程序以後,只要把注意力集中在開發各個子功能上就可以了。。
可是 php 大多數情況下工作於 web 環境,有「頁」的概念,每次執行都是一個新的請求。這就註定了很難實現真正的 MVC,因為用戶看到頁面時,PHP 已經執行完了,不可能再切換去調另一個 模型M 和 視圖V 。
目前自稱 MVC 的各種框架。也只不過是用一個程序判斷請求,載入不同的功能塊。只能稱之為「單點入口」,在思路上是「請求相同的部份,而包含不同的部份」。這個入口程序實際上啥也沒做,所以算不上是 MVC。反而 JS 開發的富客戶端更接近一些。由一個 JS 主程序,跟據用戶請求決定調用哪些數據,再把界面改變成什麼樣。
設計風格是前人總結出來的東西,在當前語言,當然環境,當前思維方式下。比較容易繼續思考的一種設計方式。MVC 只不過是其中一種,而且並不是最適合 PHP 的一種。偏偏被炒作得好像標准似的。。
如果你一定要, 就去看一下 「PHP 單點入口實現」吧,已經是比較接近的東西了。如果一次性的控制器也能算控制器的話……
C. 什麼是MVCPHP
MVC由Model(模型),view(視圖)和Controller(控制器)組成,PHP MVC可以更高效地管理好3個不同層的PHP代碼。
Model:數據信息存取層。
View:view層負責將應用的數據以特定的方式展現在界面上。
Controller:通常控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。
D. php中MVC的開發模式如何去理解
MVC設計模式把一個軟體組件區分為三個不同的部分,model,view,controller。
MVC模式是"Model-View-Controller"的縮寫,中文翻譯為"模式-視圖-控制器"。MVC應用程序總是由這三個部分組成。Event(事件)導致Controller改變Model或View,或者同時改變兩者。只要Controller改變了Models的數據或者屬性,所有依賴的View都會自動更新。類似的,只要Controller改變了View,View會從潛在的Model中獲取數據來刷新自己。MVC模式最早是smalltalk語言研究團提出的,應用於用戶交互應用程序中。smalltalk語言和java語言有很多相似性,都是面向對象語言,很自然的SUN在petstore(寵物店)事例應用程序中就推薦MVC模式作為開發Web應用的架構模式。MVC模式是一種架構模式,其實需要其他模式協作完成。在J2EE模式目錄中,通常採用service to worker模式實現,而service to worker模式可由集中控制器模式,派遣器模式和Page Helper模式組成。而Struts只實現了MVC的View和Controller兩個部分,Model部分需要開發者自己來實現,Struts提供了抽象類Action使開發者能將Model應用於Struts框架中Model是代表組件狀態和低級行為的部分,它管理著自己的狀態並且處理所有對狀態的操作,model自己本身並不知道使用自己的view和controller是誰,系統維護著它和view之間的關系,當model發生了改變系統還負責通知相應的view。
View代表了管理model所含有的數據的一個視覺上的呈現。一個Model可以有一個以上的View,但是Swing中卻很少有這樣的情況。
Controller管理著model和用戶之間的交互的控制。它提供了一些方法去處理當model的狀態發生了變化時的情況。
E. 什麼是THINKPHP 和 MVC的概念
thinkphp是編程語言php的一個框架,框架就是工具集合體,提高開發效率的。
mvc是一種編程思想,m是model的縮寫,用作數據處理,v是view,就是網頁視圖,c是controller,控制器的意思,用作邏輯處理;mvc可以方便不同邏輯的開發,提高代碼可讀性和可維護性。
thinkphp支持mvc。
F. python+django MTV框架 和php MVC框架的不同之處
python+django MTV框架 和php MVC框架的不同之處
最近學習了python語言和djangoMTV框架,感覺用的很爽啊。這里給大家粗略的介紹一下。
Django是一個開放源代碼的Web應用框架,由Python寫成。採用了MTV的設計模式,即模型M,模版T和視圖控制器V。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的。並於2005年7月在BSD許可證下發布。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。
Django的主要目標是使得開發復雜的、資料庫驅動的網站變得簡單。Django注重組件的重用性和「可插拔性」,敏捷開發和DRY法則(Don't Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和數據模型。
關鍵一點是Django框架把控制層(Ctronl layer)給封裝了,無非與數據交互這層都是資料庫表的讀,寫,刪除,更新的操作.在寫程序的時候,只要調用方法就行了.感覺很方便.用戶可以用很少的代碼完成很多的事情.代碼可讀性強.運行的速度比php要快.
python是嵌入式的語言,它可以把C和JAVA語言的寫的東西結合在一起.也難怪Google公司主導議語言用python,c++,java的比較多.大的公司比較重視系統管理和總體的架構.
有人說最有發展的語言是python,不過都值得大家去探討的.因為結果都很預料,前段時間鬧的很熱的是Ruby語言,Ruby剛出來時,傳說也很了得,現在看起來也不怎麼行了.
Python的前景
Python在編程領域的佔有率一直處於穩步上升之中,根據最新的數據,Python排名第七。前六名分別是Java,C,VB,C++,PHP和Perl. 作為一個很年輕的語言,Python的位置已經相當令人振奮了。隨著微軟將Python納入.Net 平台,相信Python的將來會更加強勁發展。Python 很可能會成為.Net平台快速開發的主流語言。
欲了解這方面情況,請參考Iron Python的相關信息.
著名的搜索引擎 Google 也大量使用Python。 現在中國的搜狐(sohu)網站郵箱系統也是用python開發的.更加令人吃驚的是,在Nokia智能手機所採用的Symbian操作系統上,Python成為繼C++,Java之後的第三個編程語言!可見Python的影響力之巨大。
我在學python語言和django MTV框架的一點體會,拿來教程,都說該語言如何簡單易學,都是亂說,入門很簡單,想要學深點,都不容易的.
個人感覺還是學PHP入門時最簡單,不過現在弄出哪么框架,組件,也變得越來越不簡單,PHP也越來越像JAVA的兒子JSP(當然PHP是C語言的兒子),個人覺得他們越來越接近,但又有好多差異.
python語言不僅可以做WEB應用,而且可以做桌面,伺服器軟體和手機軟體開發(有的諾基亞手機系統就是用python做的),而PHP專注做WEB 應用的,PHP開發祖師也為PHP為什麼不能轉向照顧到做桌面,伺服器軟體和手機軟體開發的應用聽說也苦耐了好久,但最終沒能成功轉型.哪是因為他們在最初的底層定位搞死了(網上評論觀點).
不過我看到網上語言排名,PHP在Python之前,也說明PHP在近期表現不俗.
我喜歡用Python,Django,也很喜歡用php,thinkphp,特別是升級後的1.5版,但是可不可也做成MTV的框架模式呢.用精良的代碼完成很多工作.加快開發速度呢.大家都要努力哦.加油兄弟們.
2樓回復:
美國太空總署NASA使用Python,Google使用Python,Youtube使用Python.阿里巴巴也用python開發,搜狐郵箱是用python2.6開發的
5樓回復:
MVC與MTV有什麼不同呢.
大家都知道
MVC 中的M是代表MODLE層,V代表VIEW層,C代表Contrl層.
MTV 中的M是代表MODLE層,T代表Template(模板層),V代表VIEW層.
Django 是MTV模式框架,它把Control控制層容合到 Django 框架里邊了,
程序員把 Control控制層東西交給Django自動完成了, 只需要編寫非常少的代碼完成很多的事情.所以,它比MVC框架考慮的問題要深一步.因為我們程序員大都寫程序在Contrl層,現在這個工作交給了框架,僅需寫很少的調用代碼,自然工作效率就提高了.
G. PHP中適合使用MVC嗎
適合,不用MVC的話,不容易團隊合作,而且很容易出現修改一個地方另外的地方沒有進行修改(bug總改不完)。
盡量學著使用mvc開發,這樣對你的代碼有好處。
而且等你熟練了以後,你會發現代碼重用很方便。
H. php的tp框架和mvc有啥區別
首先說Model吧。
在TP中是一個表對應一個Model,而且普通Model中只是一些自動驗證啊,自動完成啊、還有數據欄位信息啊一些東西;而CI中的Model則完全不同,一個Model不必約束於一個表,也就是說名字為abc的Model中你也可以查詢名字為def的表中的數據,而且可以定義方法完成一些數據查詢,比如我可以在名為articles_model的Model中定義一個名字為get_articles的方法來獲取所有文章信息,當某個Controller載入了這個Model後,就可以在相應的Controller中用
1
$this->articles_model->get_articles();
來方便地獲取所有文章信息,而對於TP來說,這些操作只能在Action類中完成。2.0版的TP已經把View、Relation和Adv三個高級查詢model庫類定為不自動載入了,看了一下手冊,感覺除了View視圖查詢容易用一點,另外兩個都不怎麼好用,感覺用起來太復雜,還不如用原生的sql查詢。CI的Model還有一個使我很喜歡的方法就是dbprefix方法,在使用原生的sql查詢時使用這個函數使得修改資料庫表名前綴後你的代碼不需要經過任何改動。在TP中我沒有發現類似的函數,當我用TP開發一個博客系統時,發現關聯查詢很麻煩,於是想用原生的SQL查詢,卻沒有找到自動增加資料庫表名前綴的方法,雖然可以自己修改TP的核心庫來實現,但是還是覺得這樣有點不太好。真的要感謝TP,如果不是TP,也許我就不會去關注CI了,當我那天看了幾頁CI的英文文檔後,立馬就對它產生的深厚的興趣,於是第二天一起床就開始看CI的手冊,雖然是從官網下的英文版的,不過它的手冊寫得很簡潔、很周到,邊看邊操作,看完手冊後我就幾乎能熟練使用這個框架了。於是用它開發了一個博客系統。
CI的Model類簡單易用,TP的Model類功能相對來說要強大一些,但是用起來個人感覺沒有那麼方便。
其次,對於View,從功能上講,TP的View要更加強大一些,選擇更多一些,在TP中你可以選擇就用PHP作模板引擎,可以就用TP自身的模板引擎,也可以選擇用smarty等其它第三方模板引擎。而在CI中就只能用CI內置的功能簡單的模板引擎或者用原生的PHP代碼作模板,個人覺得用PHP作模板更好一些,一來省去了學習另外的模板引擎語法的麻煩,二來執行效率更高一些。因些從View來講,選擇CI或者是TP都無所謂。
再次是Controller了,在CI中的應用的控制器是繼承自核心類Controller的,TP中的控制器則是繼承於核心類Action。不過還是有不同的,在TP中,你可以把一些公共的變數或者在多個控制器中都要執行的東西放在一個action里,假如這個action文件為CommonAction.class.php ,在它的_initialize方法中可以執行一些在多個控制器中都要執行的代碼或者初始化一些多個控制器都要使用的變數,這樣,應用的其它action只要繼承CommonAction 就可以實現了。因為框架在載入相應action時首先會自動載入那個CommonAction的。而在CI中就沒有這個方便的功能了,但是也可以自己寫一個library,在該library類的__construct方法里放一些代碼,然後在每個控制器中都載入這個library,這樣也可以實現像TP一樣的功能。不過相對來說麻煩了一些。TP還有一點比較靈活的就是,在這個控制器(action)裡面可以執行那個控制器中的函數(比如用A或者R函數來實現),在CI中則不行,你不能在這個控制器中執行那個控制器中的函數。還有就是TP可以定義一個名為EmptyAction的控制器,當所有控制器都找不到時,就調用這個Empty控制器。這一點如果與empty方法配合,可以使得URL大大縮減。雖然CI和TP都支持空操作,不過這二者的空操作名稱不相同,實現的優先順序也不相同。在TP中的空操作(_empty方法)優先順序是最低的,也就是說當當前控制器的所有操作都找不到時才調用這個空操作;在CI中則恰恰相反,只要存在空操作(_remap方法),該控制器的其它的操作都沒用了(不能訪問了)。