php での MVC の簡単な実装、phpmvc_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:07:59
オリジナル
899 人が閲覧しました

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に同意し、次の構造で実装します:

コードをコピーします コードは次のとおりです:

localhost/index.php?c=demo&a=index¶m=welcome

より美しい URL 構造を取得したい場合は、最適化することができます。この URL 構造の最適化はこの記事とはあまり関係がないため、後ほど共有します。

上記のパラメータからわかるように、アクセスされるファイルはindex.phpで、これにはc、a、paramの3つのパラメータも含まれています。

MVC ディレクトリ構造

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

コードをコピーします コードは次のとおりです:
/*
§─www │ §─controller # コントローラーディレクトリ
│ │ §─democontroller.php # デモコントローラー
│ §─モデル │ │ §─model.php # モデルmodel
│├。view │ │ §─index.php # インデックスビュー
│ §─index.php # エントリーファイル
*/




コントローラー

次のコードをcontroller/democontroller.phpファイルに追加します。

コードをコピーします

コードは次のとおりです: // コントローラー/democontroller.php クラス DemoController
{
パブリック関数index()
{
「Hello World」をエコーし​​ます;
}
}//クラスDemoControllerの終了
// ファイルの終わり、democontroller.php



このファイルには DemoController クラスが 1 つだけ定義されており、Hello World を出力するためのインデックス メソッドのみが含まれています。
次のコードをエントリファイルのindex.phpファイルに追加します。

コードをコピーします

コードは次のとおりです: //index.php require('controller/democontroller.php');
$controller = 新しい DemoController();
$controller->index();
//index.phpの終わり



上記で同意した URL を使用してブラウザでアクセスし、出力された hello world を確認します。もちろん、リクエストした URL がそのようなものではなくても、以下に示すように、同じ出力を取得できます。

コードをコピーします

コードは次のとおりです: localhost/index.php?c=abc

URL 内のパラメーターがまだ効果がないことがわかりました。

以下の URL を使用してアクセスしても、何も出力されないことが予想されます。

コードをコピーします コードは次のとおりです:

localhost/controller/democontroller.php

この Web サイトにアクセスして正しい結果を取得したい場合は、現在、index.php を介してのみアクセスできることがわかります。そのため、この Web サイトはエントリ ファイルと呼ばれます。これで、パラメータに関係なく同じページにのみアクセスできるようになりました。では、異なる結果を表示するにはどうすればよいでしょうか?あるいは、別のコントローラーを呼び出すのはどうでしょうか?

エントリーファイルを改善

以下では、URL のパラメーターを使用して、使用するコントローラーを決定します。

コードをコピーします コードは次のとおりです:

//index.php
// ランタイムコントローラーのプレフィックスを取得します
$c_str = $_GET['c'];
// コントローラーのフルネーム
$c_name = $c_str.'コントローラー';
// コントローラーのパス
$c_path = 'コントローラー/'.$c_name.'.php';
// ランタイムアクションを取得します
$method = $_GET['a'];
// コントローラーファイルをロード
require($c_path);
//コントローラーをインスタンス化します
$controller = 新しい $c_name;
// コントローラーメソッドを実行します
$controller->$method();
//index.phpの終わり

同様に、上記で同意した URL を使用してブラウザでアクセスし、出力された hello world を確認します。コード内のコメントは、各ステップの目的を説明しています。もちろん、URL パラメーターの c と a の値を変更することで、異なるコントローラーとそのメソッドを呼び出して、異なる結果を出力することができます。

見る見る

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

コードをコピーします コードは次のとおりです:

// view/index.php
クラスインデックス {
パブリック関数表示($output) {
// ob_start();
echo $output;
}
}
//index.phpの終わり

Index メソッドは view ディレクトリのindex.php ファイルで定義されており、渡された変数を出力する役割を担う display() 関数は 1 つだけあります。
以下のコントローラーファイルを変更します。

コードをコピーします コードは次のとおりです:

// コントローラー/democontroller.php
クラス DemoController
{
private $data = 'こんにちは、furzoom!';
パブリック関数index()
{
//「hello world」をエコーし​​ます;
require('view/index.php');
$view = 新しいインデックス();
$view->display($data);
}
}//クラスDemoControllerの終了
// ファイルの終わり、democontroller.php

データ プライベート変数はコントローラーで定義されます。index() メソッドは直接出力しなくなり、ビュー オブジェクトを使用して出力を処理します。この時点で、上記で同意した URL に従ってアクセスすると、次の出力が表示されます:

ファーズームさん、こんにちは!
さまざまなリクエストに応じてさまざまなビュー クラスを呼び出して、さまざまな形式でデータを表示できます。これによりビューの役割が増加し、デザイナーはビュー専用のページをデザインできるようになります。

モデル

上記は非常にクールに見えますが、表示するコンテンツはコントローラーで直接指定され、データ処理がモデルに渡されるようにコンテンツも URL で指定されることを望みます。

コードをコピーします コードは次のとおりです:

//モデル/model.php
クラスモデル {
private $data = array(
'タイトル' => 'こんにちはファーズーム'、
'ようこそ' => 'furzoom.com へようこそ',
);
パブリック関数 getData($key) {
return $this->data[$key];
}
}
//model.phpの終わり

ビュー ファイルmodel.php は、要求されたデータを返す getData() メソッドを定義する Model クラスを定義します。

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

コードをコピーします コードは次のとおりです:

//index.php
// ランタイムコントローラーのプレフィックスを取得します
$c_str = $_GET['c'];
// コントローラーのフルネーム
$c_name = $c_str.'コントローラー';
// コントローラーのパス
$c_path = 'コントローラー/'.$c_name.'.php';
// ランタイムアクションを取得します
$method = $_GET['a'];
// 実行時パラメータを取得します
$param = $_GET['param'];
// コントローラーファイルをロード
require($c_path);
//コントローラーをインスタンス化します
$controller = 新しい $c_name;
// コントローラーメソッドを実行します
$controller->$method($param);
//index.phpの終わり

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

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

コードをコピーします コードは次のとおりです:

// コントローラー/democontroller.php
クラス DemoController
{
// private $data = 'こんにちは、furzoom!';
関数インデックス($param)
{
// 'hello world' をエコーし​​ます;
require('view/index.php');
require('model/model.php');
$model = 新しいモデル();
$view = 新しいインデックス();
$data = $model->getData($param);
$view->display($data);
}
}//クラスDemoControllerの終了
// ファイルの終わり、democontroller.php

必要なビュー ファイルとモデル ファイルが含まれており、ビュー ファイルとモデル ファイルを生成し、モデル オブジェクトを通じてデータを取得し、ビュー オブジェクトを使用して取得したデータを出力します。

この時点で、上記で同意した URL を使用してブラウザでアクセスすると、次の出力が表示されます:

furzoom.comへようこそ
以下に示すように:

この時点で、PHP の MVC モデルは基本的に導入されました。残りの作業は、必要に応じて追加および拡張するだけです。 !

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/954099.html技術記事 PHP は単純に MVC (phpmvc) を実装しています。PHP での MVC の使用は、特に一部のオープン ソース フレームワークでますます普及しています。ほとんどの状況では MVC で十分ですが、適さない状況もいくつかあります...
関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート