php は MVC、phpmvc を実装します
PHP での MVC の使用は、特に一部のオープンソース フレームワークでますます一般的になりつつあります。ほとんどの状況では MVC で十分ですが、記事数が数百しかない比較的単純な個人ブログなど、場合によっては MVC を使用するのは少し複雑すぎると感じます。記事によると、MVC は Sina などのポータル Web サイトの場合、MVC を使用すると大量のファイルが読み込まれるため、ほとんどの状況には適していません。速度への影響は許容できません。 Maple Bamboo Dream では、MVC の基本原理と簡単な実装を紹介します。次の導入は PHP 開発に適しています。
PHP の MVC
MVC[1] は、ソフトウェア工学におけるソフトウェア アーキテクチャです。 PHP の観点から見ると、MVC は少し異なります。
モデル(モデル)、プログラムアプリケーションの機能の実現とプログラムロジックの実現。 PHPでのデータ管理とデータ生成を担当します。
View (ビュー)、グラフィカル インターフェイス ロジック。 PHP での出力を担当し、テンプレートと必要なリソース ファイルの呼び出し方法を処理します。
Controller (コントローラー) は、リクエストの転送とリクエストの処理を担当します。 PHPでは、リクエストに基づいて呼び出されるビューと使用されるデータが決定されます。
MVC を使用する理由
MVC の主な機能は、コードを階層化して分類することです。
MVC の主な目的は、Web 開発における開発作業と設計作業の分離の問題を解決し、作業を比較的独立させることです。
このプロセス中に、Web サイトのディレクトリ構造が明確になり、Web サイトの保守と拡張が容易になり、モジュールを再利用できることもわかりました。
MVC実装
リクエストURL
まず、ページをリクエストする際にURLに同意し、次の構造で実装します:
リーリー
より美しい URL 構造を取得したい場合は、最適化することができます。この URL 構造の最適化はこの記事とはあまり関係がないため、後ほど共有します。
上記のパラメータからわかるように、アクセスされるファイルは index.php
,同时含有3个参数分别为c
、a
、param
です。
MVC ディレクトリ構造
次に、MVC のディレクトリ構造を次のように計画します。
コントローラー
次のコードを
ファイルに追加します。 controller/democontroller.php
003
|
{
|
004 |
public function index()
|
在这个文件中仅仅定义了一个DemoController
的类,且其只包含一个index
方法,用于输出hello world
。
将下面代码添加到入口文件index.php
文件中。
002 |
require ( 'controller/democontroller.php' );
|
003 |
$controller = new DemoController();
|
004 |
$controller ->index();
|
在浏览器中使用上面的约定的URL进行访问,看到输出hello world
。当然如果你请求的URL不是那样,而是如下面所示也能得到同样的输出。
localhost/index.php?c=abc
ログイン後にコピー
发现URL中的参数还没有任何作用。
如果使用下面的URL进行访问,可以预见不会有任何输出。
localhost/controller/democontroller.php
ログイン後にコピー
可以看到要想访问这个网站并得到正确的结果,目前只能通过index.php
来访问,这也是为什么称它为入口文件的原因。现在无论参数如何只能访问同样一个页面,那么如何来决定显示不同的结果呢?或者调用不同的控制器呢?
改进入口文件
下面利用URL中的参数来决定使用哪个控制器。
005 |
$c_name = $c_str . 'controller' ; |
007 |
$c_path = 'controller/' . $c_name . '.php' ; |
009 |
$method = $_GET [ 'a' ]; |
013 |
$controller = new $c_name ; |
015 |
$controller -> $method (); |
同様に、上記で合意した URL を使用してブラウザでアクセスし、出力 hello world
。代码中的注释已经说明了每一步的目的。当然可以通过改变URL参数中的c
与a
値を確認して、さまざまなコントローラーとそのメソッドを呼び出し、さまざまな結果を出力します。
見る見る
以前はコントローラーコントローラーを使用し、エントリーファイルで異なるコントローラーを動的に呼び出しましたindex.php
。次に、ビューを結合すると分離が表示されます。
003 |
public function display( $output ) { |
视图目录中的index.php文件中定义了Index
方法,且只有一个display()
函数,负责将传递给它的变量进行输出。
下面修改控制器文件。
004 |
private $data = 'Hello furzoom!' ; |
005 |
public function index() |
008 |
require ( 'view/index.php' ); |
010 |
$view ->display( $data ); |
在控制器中定义了一个data
私有变量,index()方法不再直接输出,而是使用视图对象处理输出。此时,按上面的约定的URL进行访问时,将看到输出:
可以根据不同的请求调用不同的视图类,以不同的形式显示数据。这样就将增加了视图的作用,设计人员可以只针对视图进行页面的设计。
模型Model
上面貌似已经很cool了,但是显示什么样的内容是在控制器中直接指定的,希望内容也由URL指定,这样将数据的处理交给模型来处理。
003 |
private $data = array ( |
004 |
'title' => 'Hello furzoom' , |
005 |
'welcome' => 'Welcome to furzoom.com' , |
008 |
public function getData( $key ) { |
009 |
return $this ->data[ $key ]; |
ビュー ファイルmodel.php は、要求されたデータを返すための Model
类,类中定义了一个getData()
メソッドを定義します。
エントリファイルindex.phpも次のように変更します:
005 |
$c_name = $c_str . 'controller' ; |
007 |
$c_path = 'controller/' . $c_name . '.php' ; |
009 |
$method = $_GET [ 'a' ]; |
011 |
$param = $_GET [ 'param' ]; |
015 |
$controller = new $c_name ; |
017 |
$controller -> $method ( $param ); |
パラメータを追加$param
し、コントローラーのメソッド呼び出しパラメータとして使用します。
また、さまざまなパラメーターに基づいてさまざまなデータを取得するには、コントローラー メソッドを変更する必要があります。
005 |
function index( $param ) |
008 |
require ( 'view/index.php' ); |
009 |
require ( 'model/model.php' ); |
010 |
$model = new Model(); |
012 |
$data = $model ->getData( $param ); |
013 |
$view ->display( $data ); |
包含需要的视图文件和模型文件,然后生成视图与模型文件,接着通过模型对象取得数据,再用视图对象来输出取得的数据。
此时,在浏览器中使用上面的约定的URL进行访问,将得到输出如下:
Welcome to furzoom.com
ログイン後にコピー
如下图:
![](http://furzoom.qiniudn.com/wordpress-php-mvc-1.PNG-furzoom)
至此PHP的MVC模式已经基本介绍完成了,剩余的工作就是根据需要进行添加扩充了,很简单吧!!
参考文章
[1] http://zh.wikipedia.org/wiki/MVC
[2] http://blog.chinaunix.net/uid-20761674-id-75075.html
[3] http://wo.zdnet.com.cn/blog-476979-6965.html
[4] http://www.cnblogs.com/cocowool/archive/2009/09/08/1562874.html
转载请注明:http://furzoom.com/php-instantiate-mvc/ By 枫竹梦
http://www.bkjia.com/PHPjc/952775.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/952775.htmlTechArticlephp实现MVC,phpmvc 在PHP中使用MVC越来越流行了,特别是在一些开源的框架当中。MVC足以应对大多数的情况,但还有一些情况是其不太适合的,...