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 モデルは基本的に導入されました。残りの作業は、必要に応じて追加および拡張するだけです。 !
http://www.bkjia.com/PHPjc/954099.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/954099.html技術記事 PHP は単純に MVC (phpmvc) を実装しています。PHP での MVC の使用は、特に一部のオープン ソース フレームワークでますます普及しています。ほとんどの状況では MVC で十分ですが、適さない状況もいくつかあります...