ホームページ > バックエンド開発 > PHPチュートリアル > PHP は独自の MVC フレームワークのアイデアを作成します

PHP は独自の MVC フレームワークのアイデアを作成します

WBOY
リリース: 2016-06-20 13:03:38
オリジナル
992 人が閲覧しました

この記事では、事例を通して PHP の MVC 実装原理を簡単に紹介するだけです。実際、ほとんどのフレームワークの MVC もこの原理に基づいて実装されています。これ以上は説明せずに、直接コードに進みましょう。

1. ファイル構造

3 つのフォルダーを作成します
controller フォルダーにはコントローラー ファイルが格納されます
view フォルダーにはビュー ファイルが格納されます
model フォルダーにはデータ ファイルが格納されます
入り口のみ

2. コントローラー

コントローラーフォルダーに、democontroller.php ファイルを作成します。ファイルの内容は次のとおりです

<p><?php </p>class DemoController <br />{ <br />function index() <br />{ <br />echo('hello world'); <br />} <br />} <br /><p>/* End of file democontroller.php */ </p>
ログイン後にコピー

このファイルでは、DemoController という名前のオブジェクトを作成しました。これには、hello world を出力するインデックス メソッドが含まれています。

以下は、index.php の DemoController で Index メソッドを実行します。

index.php のコードは次のとおりです。

<p><?php </p>require('controller/democontroller.php'); <br />$controller=new DemoController(); <br />$controller->index(); <br /><p>/* End of file index.php */ </p>
ログイン後にコピー

index.php を実行します。予想通り、長らく失われたものが表示されました。こんにちは世界。これら 2 つのファイルは非常にシンプルですが、唯一の入り口から実行したいコントローラーを実行するという MVC の本質も少し明らかにしています。もちろんコントローラー部分はuriで決まるはずなので、どのコントローラーを実行するかをuriで判断できるようにindex.phpを書き換えましょう。

index.php のコードを次のように書き換えます。

<p><?php </p>$c_str=$_GET['c']; <br />//获取要运行的controller <br />$c_name=$c_str.'Controller'; <br />//按照约定url中获取的controller名字不包含Controller,此处补齐。 <br />$c_path='controller/'.$c_name.'.php'; <br />//按照约定controller文件要建立在controller文件夹下,类名要与文件名相同,且文件名要全部小写。 <br />$method=$_GET['a']; <br />//获取要运行的action <br />require($c_path); <br />//加载controller文件 <br />$controller=new $c_name; <br />//实例化controller文件 <br />$controller->$method(); <br />//运行该实例下的action <br /><p>/* End of file index.php */ </p>
ログイン後にコピー

「http://localhost/index.php?c」と入力します。ブラウザ =demo&a=index、Hello World が表示されました。もちろん、別のコントローラーがあり、それを実行したい場合は、url パラメーターの c と a の値を変更するだけで済みます。

ここで説明すべき問題がいくつかあります。

1. PHP は動的言語であり、必要なオブジェクトを直接取得し、文字列 new、つまり上記の新しい $c_name を通じて必要なメソッドを実行できます。これは new 'DemoController として理解できます。 '、$c_name 自体の値は 'DemoController' であるため、新しい 'DemoController' を直接記述することはできません。'DemoController' 文字列は変数を介して転送する必要があります。方法は同じです。

2. URL の c の値は、demo です。つまり、$c_name の値は、demoController である必要があります。これはまだ機能しますか? 「php では大文字と小文字が区別されます」という文は不完全です。php では、変数 ($ が前に付く) と定数 (define で定義される) のみが大文字と小文字を区別し、クラス名、メソッド名、さらには一部のキーワードは大文字と小文字を区別しません。書かれた。また、true、false、null などは、すべて大文字またはすべて小文字のみにすることができます。もちろん、実際のエンコード処理では大文字と小文字を区別する必要があります。

3. ビュー

前のコントローラーでは「hello world」を出力しただけですが、mvc の効果は得られませんでした。 次に、これに view 関数を追加します。ここまでで、基本的にビュー機能を追加する方法を誰もが考えることができるようになったと思います。はい、それは邪悪な require または include によって達成されます。

まず、view フォルダーの下にindex.php を作成し、何でも書きます (笑、まだ hello world と書きました)。次に、以前の DemoController を書き直します。

コードは次のとおりです。

<p><?php </p>class DemoController <br />{ <br />function index() <br />{ <br />require('view/index.php'); <br />} <br />} <br /><p>/* End of file democontroller.php */</p>
ログイン後にコピー

ブラウザで再度実行して、必要なコンテンツが出力されたかどうかを確認します。 。

次に、コントローラーを介してビューにデータを渡します。コードは次のとおりです。

<p><?php </p>class DemoController <br />{ <br />function index() <br />{ <br />$data['title']='First Title'; <br />$data['list']=array('A','B','C','D'); <br />require('view/index.php'); <br />} <br />} <br /><p>/* End of file democontroller.php */</p>
ログイン後にコピー

Index.php ファイル。ビューフォルダー内のコードは次のとおりです:

<p><html> </p><head> <br /><title>demo</title> <br /></head> <br /><body> <br /><h1><?php echo $data['title'];?></h1> <br /><?php <br />foreach ($data['list'] as $item) <br />{ <br />echo $item.'<br>'; <br />} <br />?> <br /></body> <br /></html>
ログイン後にコピー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート