ホームページ  >  記事  >  バックエンド開発  >  php による MVC の実装、phpmvc_PHP チュートリアル

php による MVC の実装、phpmvc_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:08:09767ブラウズ

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个参数分别为caparam です。

MVC ディレクトリ構造

次に、MVC のディレクトリ構造を次のように計画します。

001 /*
002 ├─www                       # 网站根目录
003 │  ├─controller             # 控制器目录
004 │  │  ├─democontroller.php  # demo控制器
005 │  ├─model                  # 模型目录
006 │  │  ├─model.php           # model模型
007 │  ├─view                   # 视图目录
008 │  │  ├─index.php           # index视图
009 │  ├─index.php              # 入口文件
010 */
コントローラー

次のコードを

ファイルに追加します。 controller/democontroller.php

001 // controller/democontroller.php
002 class DemoController
003 {
004     public function index()
005     {
006     echo 'hello world';
007     }
008 }// End of the class DemoController
009  
010 // End of file democontroller.php

在这个文件中仅仅定义了一个DemoController的类,且其只包含一个index方法,用于输出hello world

将下面代码添加到入口文件index.php文件中。

001 //index.php
002 require('controller/democontroller.php');
003 $controller new DemoController();
004 $controller->index();
005  
006 // End of index.php

在浏览器中使用上面的约定的URL进行访问,看到输出hello world。当然如果你请求的URL不是那样,而是如下面所示也能得到同样的输出。

localhost/index.php?c=abc

发现URL中的参数还没有任何作用。

如果使用下面的URL进行访问,可以预见不会有任何输出。

localhost/controller/democontroller.php

可以看到要想访问这个网站并得到正确的结果,目前只能通过index.php来访问,这也是为什么称它为入口文件的原因。现在无论参数如何只能访问同样一个页面,那么如何来决定显示不同的结果呢?或者调用不同的控制器呢?

改进入口文件

下面利用URL中的参数来决定使用哪个控制器。

001 //index.php
002 // get runtime controller prefix
003 $c_str $_GET['c'];
004 // the full name of controller
005 $c_name $c_str.'controller';
006 // the path of controller
007 $c_path 'controller/'.$c_name.'.php';
008 // get runtime action
009 $method $_GET['a'];
010 // load controller file
011 require($c_path);
012 // instantiate controller
013 $controller new $c_name;
014 // run the controller  method
015 $controller->$method();
016
017 // End of index.php

同様に、上記で合意した URL を使用してブラウザでアクセスし、出力 hello world。代码中的注释已经说明了每一步的目的。当然可以通过改变URL参数中的ca 値を確認して、さまざまなコントローラーとそのメソッドを呼び出し、さまざまな結果を出力します。

見る見る

以前はコントローラーコントローラーを使用し、エントリーファイルで異なるコントローラーを動的に呼び出しましたindex.php。次に、ビューを結合すると分離が表示されます。

001 // view/index.php
002 class Index {
003     public function display($output) {
004         // ob_start();
005         echo $output;
006     }
007 }
008
009 // End of index.php

视图目录中的index.php文件中定义了Index方法,且只有一个display()函数,负责将传递给它的变量进行输出。
下面修改控制器文件。

001 // controller/democontroller.php
002 class DemoController
003 {
004     private $data 'Hello furzoom!';
005     public function index()
006     {
007     //echo 'hello world';
008     require('view/index.php');
009     $view new Index();
010     $view->display($data);
011     }
012 }// End of the class DemoController
013  
014 // End of file democontroller.php

在控制器中定义了一个data私有变量,index()方法不再直接输出,而是使用视图对象处理输出。此时,按上面的约定的URL进行访问时,将看到输出:

Hello furzoom!

可以根据不同的请求调用不同的视图类,以不同的形式显示数据。这样就将增加了视图的作用,设计人员可以只针对视图进行页面的设计。

模型Model

上面貌似已经很cool了,但是显示什么样的内容是在控制器中直接指定的,希望内容也由URL指定,这样将数据的处理交给模型来处理。

001 // model/model.php
002 class Model {
003     private $data array(
004                 'title' => 'Hello furzoom',
005                 'welcome' => 'Welcome to furzoom.com',
006                 );
007
008     public function getData($key) {
009         return $this->data[$key];
010     }
011 }
012
013 // End of model.php

ビュー ファイルmodel.php は、要求されたデータを返すための Model类,类中定义了一个getData() メソッドを定義します。

エントリファイルindex.phpも次のように変更します:

001 //index.php
002 // get runtime controller prefix
003 $c_str $_GET['c'];
004 // the full name of controller
005 $c_name $c_str.'controller';
006 // the path of controller
007 $c_path 'controller/'.$c_name.'.php';
008 // get runtime action
009 $method $_GET['a'];
010 // get runtime parameter
011 $param $_GET['param'];
012 // load controller file
013 require($c_path);
014 // instantiate controller
015 $controller new $c_name;
016 // run the controller  method
017 $controller->$method($param);
018
019 // End of index.php

パラメータを追加$paramし、コントローラーのメソッド呼び出しパラメータとして使用します。

また、さまざまなパラメーターに基づいてさまざまなデータを取得するには、コントローラー メソッドを変更する必要があります。

001 // controller/democontroller.php
002 class DemoController
003 {
004     // private $data = 'Hello furzoom!';
005     function index($param)
006     {
007     // echo 'hello world';
008         require('view/index.php');
009     require('model/model.php');
010     $model new Model();
011     $view new Index();
012     $data $model->getData($param);
013     $view->display($data);
014     }
015 }// End of the class DemoController
016  
017 // End of file democontroller.php

包含需要的视图文件和模型文件,然后生成视图与模型文件,接着通过模型对象取得数据,再用视图对象来输出取得的数据。

此时,在浏览器中使用上面的约定的URL进行访问,将得到输出如下:

Welcome to furzoom.com

如下图:

至此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 枫竹梦

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/952775.htmlTechArticlephp实现MVC,phpmvc 在PHP中使用MVC越来越流行了,特别是在一些开源的框架当中。MVC足以应对大多数的情况,但还有一些情况是其不太适合的,...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。