ホームページ > php教程 > php手册 > PHP5でMVC構造を学ぶ

PHP5でMVC構造を学ぶ

WBOY
リリース: 2016-06-21 09:14:44
オリジナル
1099 人が閲覧しました

php5

1. はじめに

現在、WEB アプリケーションを開発する際に最も一般的な方法の 1 つは、「MVC」構造を使用して WEB アプリケーションを開発することです。これにより、プログラムの設計がより便利になります。 「MVC」とは何ですか?簡単に言うと「Model」「View」「Controller」の組み合わせ、つまりすべて「3層」の抽象構造です。もちろん、ここで言う「MVC」はWEB上のアプリケーション向けです。 「コードとページ設計の分離」は、Java Servlet/JavaServer Pages テクノロジーを使用した「Struts」で最も明確に表現されています。興味のある方は、http://jakarta.apache.org/strutsLook を参照してください。この設計パターンにより、プログラマーはコードの設計、作成、デバッグに集中でき、Web デザイナーは特定の機能の実現に注意を払うことなく、より多くの時間を設計に投資できるため、この分業は大規模プロジェクトに最適です。またはエンタープライズレベルの分散アプリケーション開発。

PHP5 のリリースから、そのオブジェクト指向機能がますます充実していることがわかります。Zend Optimizer と組み合わせれば、PHP を使用して大規模な商用 Web サイトや分散エンタープライズ アプリケーションを開発できるようになりました。達成されました。

PHPの「MVC」デザインパターンを使ってWEBアプリケーションを開発するにはどうすればよいでしょうか? 1 つのこと (コードとページのデザインは分離されている) を覚えておいて、簡単な例を使ってそれを説明します。たとえば、データベースからメンバー情報をクエリして Web ページに表示したい場合は、次の 2 つの点を考慮する必要があります。 1. データベースに接続し、メンバーの情報を取得します。 2. Web ページにメンバー情報を表示し、データベースに接続します。これを「DB」クラスと呼びます。このとき「Model」を書く必要があります。「DB」クラスを操作してデータを取得するプログラムが役割を果たします。このプログラムは、「POST」または「PUT」データを受け取ります。クライアントにアクセスし、「DB」クラスを呼び出してデータを取得し、これらのデータを「コントローラー」に格納し、最後にそのデータを「ビュー」に渡して、上記の分析から特定のレイアウト形式に従って表示します。ここではテンプレートがその役割を果たしていることがわかります。もちろん、テンプレートクラスだけでは MVC とは言えません。詳細については、「JSF」を参照してください。

「3t」は主に「Controller」のデータを読み込み、最後にいくつかの簡単なテンプレート構文を通じてデータを表示するテンプレートクラスです。

解析速度が速く、必要に応じてHTMLキャッシュまたはPHPキャッシュを使用することもでき、高速で安定したWEBアプリケーションを実現することもできます。有名なテンプレートクラス「SMARTY」は、インストールや操作が簡単で、データの表示に関しても「PHPの文法」や「JavaBeans」に似ており、必要な機能を追加することができます。オープンソースなので、近日中にプラグイン機能もサポートされる予定です

拡張性が高く、最新の PHP5 をサポートしているため、いつでも使用できます。 PHP バージョン >=4.0.6. もちろん、サーバー上のファイルを操作する権限が必要です

それは強力で、テンプレートのマルチレベルのネスト、マルチレベルの配列ループなどをサポートしています

もちろん、このテンプレートには多くの改善の余地があります。継続的に改善する前に、さまざまな環境でテストして使用する必要があります。現在、

II 環境でのみテストされています。 インストール

1. 解凍後、次のディレクトリ構造が表示されるはずです:

./3tx.x/cmp/ コンパイルされたファイル (このフォルダーが読み取り可能および書き込み可能であることを確認してください)
./3tx.x/tpl/ テンプレート ファイル (テンプレート ファイルはここに配置されます。このフォルダーが読み取り可能であることを確認してください)
./3tx.x/che/ キャッシュ ファイルが保存されているフォルダー (このフォルダーが読み取り可能および書き込み可能であることを確認してください)
./3tx.x/ttt/ ttt.php 3T テンプレート クラス ファイル
./3tx.x/ プログラム ファイル (作成したプログラムはここに配置されます)

2. PHP バージョンを PHP4.0.6 より低くすることはできません。全体的なパフォーマンスを考慮して、PHP バージョンを 4.3 .0 以上にアップグレードすることをお勧めします。プログラムの内容が大幅に改善されます

3. 実行時に変数が定義されていない場合は、プログラムの前に「error_reporting(7);」関数を追加してください

3. 構文

テンプレートの簡単な構文説明 :
一般的に、左中括弧「{」と右中括弧「}」は、テンプレート構文の先頭と末尾として使用されます。もちろん、「[」や「]」などのカスタム区切り文字も使用できます。次の手順では中括弧を使用します。区切り文字について説明します

(注: 以下の [tplCode] と [/tplCode] の間のコードはテンプレート構文コードです)

1. テンプレート ファイル内で次のような PHP コードを使用します:
[tplCode]
{php }
$i = 3;
echo $i;
{/php}
[/tplCode]
「example6」を参照してください

2. 以下のように、テンプレートで foreach ループを使用します。


最初の使用法 (loop Array $) a、PHP の foreach に相当します ($a as $k=>$v)....)
[/tplCode]
{foreach:$a,$k,$v}
$v = {$v}

{/foreach}
[/tplCode]

2 番目の使用法 (ループする回数を設定できます。配列 $a に 15 個の要素がある場合、次のループは最初の 5)
[tplCode]
{foreach:$a,$k,$v,5}
$v = {$v}
のみを取ります。
{/foreach}
[/tplCode]

3 番目の使用法 (ループする回数を設定できます。配列 $a に 15 個の要素がある場合、次のループは 3 番目の要素から始まり、5 番目の終わりまで到達します)要素)
[tplCode]
{foreach:$a,$k,$v,3,5}
$v = {$v}

{/foreach}
[/tplCode]
」を参照してください。 example1" と "example3" では、"foreach" ループで多次元配列を使用できます。詳細については、"example10" を参照してください

3. テンプレートで次のような IF ステートメントを使用します。

最初の使用法
[tplCode]
{if :$a == "hello"}
変数 $a の値は "hello" です
{/if}
[/tplCode]

2 番目の使用法
[tplCode]
{if:$a == true }
変数 $a は true
{else}
変数 $a は true ではありません
{/if}
[/tplCode]

3 番目の使用法
[tplCode]
{if:$a == 2}
変数 $ a 変数 $a の値は 2
{elseif:$a == 3}
変数 $a の値は 3
{/if}
[/tplCode]
詳細については、「example2」と「example6」を参照してください。具体的な使用方法

4. テンプレートには、次のようなテンプレート ファイルが含まれています。含まれるテンプレート ファイルは同じディレクトリにある必要があります

5 。次のような PHP ファイルをテンプレートに含めます:
{tplCode}
{includephp:head.php}
{/tplCode}
PHP ファイル「head.php」ここに含まれており、ファイル「head.php」は現在のプログラム ディレクトリにあります
含まれるファイルについては「example8」を参照してください

6.
{tplCode}
{date:Y-m-d などの時間をテンプレートに出力します。 H:i:s}
{/tplCode}
に「Y-m-d H:i:s」が続く文字列は、PHP の標準タイムスタンプです。具体的な使用方法については、PHP マニュアルを参照してください。
具体的な使用方法については、「example7」を参照してください。 "

7. テンプレートで数学関数を使用します

最初の使用法は、結果を直接出力することです
{tplCode}
{ math:3*2-5}
{/tplCode}

2 番目の使用法は、指定された変数に値を代入します
{tplCode}
{math:3*2-5,$result}
{/tplCode}

3 番目の使用法、指定された変数に値を割り当て、3 番目のパラメーターはすぐに出力するかどうかを設定し、「Y」出力に設定します。 "N" は出力されません
{tplCode}
{math:3*2-5,$result,Y}
{ /tplCode}
具体的な使用方法は「example4」を参照してください

8. テンプレート内で FOR ループを使用します。
次のコードに示すように
[tplCode]
{for:5,1000,1,$i}
{$i}< br>
{/for}
{/tplCode}
パラメータの説明:
5:ループが 5 から始まることを示します
1000: ループが 1000 で終了することを示します
1: 各ループの増分が 1 であることを示し、$n++ に相当します
$i: 各サイクルの値を表します
(上記の定数は「5」、「1000」、「1」は、{for: $num、$max、$step、$ i} のような変数で置き換えることもできるため、変数は「assign()」メソッドを使用して割り当てられます。プログラム内)
(理解のために) 次のコードも参照してください:
[tplCode]
{for:500,30,-2,$i}
500 からループが開始され、終了するまで毎回 2 ずつ減少します。現在のループ値は次のとおりです: {$i}

{/for}
{/tplCode}
具体的な用途 「example2」、「example11」を参照してください

9. テンプレートで Email タグを使用します
最初の使用法:
[tplCode]
{email:redhat@hnwj.net}
[/tplCode]
2 番目の使用法:
[tplCode]
{email:redhat@hnwj .net,Redhat のメール アドレス}
[/tplCode]
3 番目の使用法:
[tplCode]
{email:redhat@hnwj.net,これは「Redhat」のメール アドレスです <-dh->これはスタイル化されています< ;-dh->class=m,m}
[/tplCode]
具体的な使用方法については、「example5」を参照してください

10. テンプレートで変数を定義します
[tplCode ]
{assign:$tplVar、これは定義した変数 <-dh-> はテンプレートまたは PHP コードで出力できます}
[/tplCode]
具体的な使用法については「example6」を参照してください。

11. 他の構文と関数はまだ開発中です。 ..
良いコメントやアイデアがありましたら、http://2002.buyionline.net/2002/gbook.php にお知らせください。バグを見つけた場合は、時間内にメッセージを残してください。ありがとうございます。


注:
1. このテンプレートは、多層のネストされたテンプレートまたは PHP ファイルをサポートし、多層の foreach または for ループをサポートします
2. 実際の使用スキル
実際の使用中に $cmpCheck 属性を設定すると、それ以外の場合、PHP プログラムは、コンパイルされた PHP ファイルの存在時間に基づいて再コンパイルするかどうかを決定します。通常、このプロパティのデフォルト値は true に設定されます。使用中 (プロセスを高速化できます)
次のようなメソッドを設定します: $tttObj->setCmpCheck(true);
3. このプログラムの最大の欠点は、表示される構文エラー情報を正確にキャプチャできないことです。プログラム内では
4. 現時点ではキャッシュ機能はサポートされていません。ご意見がありましたらお知らせください:-)
5. 混合モードはテンプレートを PHP ファイルにコンパイルするために使用されるため、間違えないでください (もちろん、テンプレートは大文字と小文字の一貫した記述をサポートしています。つまり、{math:38*7} と { を記述することになります) MatH: 38*7} も同じ効果があります)、「{foreach:$data,k,$v}」と入力すると、コンパイルは成功しますが、先頭に 1 つがないため、実行時に構文エラーが発生します。 「k」「$」記号の各行を構文解析してエラーを検出するコードを既に作成しましたが、コードが数百行に達すると、コードが比較的小さい場合、時間がかかることがわかりました。わかりましたが、コードが増えるとパフォーマンスが低下します。さらに、PHP 自体には非常に優れたエラーメッセージプロンプトがあるので、コードの各行を分析しませんでした。上記のロゴでは、パラメーターが二重引用符で囲まれていないことに注意してください (条件判定ステートメントを除く)。

4. PHP ファイルを作成します (最初に名前を付けます)。 php を現在のディレクトリ (つまり "./") に保存し、その内容を次のようにします:
require_once "./ttt/ttt.php";//クラス ファイルを導入します
$ttt = new TTT( );//3T テンプレート クラスのインスタンスを初期化します
$ttt->setTplDir(" ./tpl/");//コンパイルする必要があるテンプレート ファイルが保存されているディレクトリ
$ttt->setCmpDir(" ./cmp/");//コンパイルしたファイルが格納されているディレクトリ
$ttt->assign('title ','空の色');//変数を設定します
$ttt->assign(' content','青、良い天気、雲一つない、晴れ');//変数を設定します
$ttt-> assign('foot','Welcome welcome');//変数を設定します
$ttt->display(' first.tpl');//Output
?> 2. tpl ファイルを作成します (「first .tpl」という名前で、ディレクトリ「./tpl/」に保存されます)。内容は次のとおりです。 ;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">



{$title}


{$content}



{$ foot}



3. ブラウザで http://domain/ を参照します。 path/to/3tvx.x/3t/first.php と入力すると、結果が表示されます。もちろん、最初に PHP 実行環境を設定する必要があります。
4. その他の例については、プログラムに付属の「サンプル」シリーズを参照してください。
5. クラス属性 (部分)
$tplDir:String,"./ tpl/"
テンプレートファイルのディレクトリ

$cmpDir:String," 読み込む必要のあるテンプレートはここから読み込まれます

$cmpDir:String,"./cmp/"
コンパイル後のPHPファイル格納ディレクトリ

$cheDir:String," ./che/"

$tplFile:String,""
テンプレート ファイル、解析されるメイン テンプレート ファイル

$startLeft:String,"{"
テンプレート変数 テンプレート変数の左境界記号は次のように設定できます。 setLeft(String $s)メソッドを自分で

$startRight:String,"}"
テンプレート変数の右境界記号はsetRight(String $s)メソッドで設定可能


6. クラスメソッド(一部) )
TTT(String|null)
クラス コンストラクター。$obj->TTT("head.tpl");

setLeft(String )
Set のように、ここで解析する必要があるテンプレートを直接設定できます。テンプレート変数 "$startLeft" の左境界、変数のデフォルトは "{" です

setRight(String)
テンプレート変数 "$startRight" の左境界を設定します、変数のデフォルトは "{"

setTplDir( String) )
このメソッドの同じ名前は「setTemplatesFile()」です

setCmpDir(String)
このメソッドの同じ名前は「setCompilesFile()」です。

setCheFile(String)
同名のメソッドは「setCachesFile()」です

setCacheFilter(String|array)
テンプレートキャッシュ機能を使用すると、このメソッドで設定したファイルがキャッシュされません

setWordsFilter(array)
$ttt->setWordsFilter('abc','xyz'); のように、Web サイトに表示しない文字または文字列を設定します。 "xyz" の Web ページ ;

setWordsFile(String|array)
Web サイトでの表示に適さない文字や文字列が設定されている場合、このメソッドで設定されたファイル内の文字や文字列は " setWordsFilter()" メソッド。

setQuery(String)
を表示このメソッドは、テンプレートのキャッシュ機能を使用する場合にのみ使用されます。主に、キャッシュされたファイルが重複しないように、テンプレートを自動的に取得するために独自の文字列を設定するために使用されます。プログラムから異なるパラメータを取得し続ける限り、N 回後には、サーバーのハードディスクの容量が足りなくなる可能性があります。キャッシュ関数を使用し、このメソッドを使用して一意の文字列を設定するわけではないため、プログラム内で一部の GET または POST 値を正しく設定して処理することが非常に重要です。このメソッドは、「$ttt->setQuery("typeid=$tid&msgid=$sid")」のように使用できます。悪意のあるユーザーが別の $tid または $sid を送信すると、上記の攻撃も引き起こされることに注意してください。イベントが発生するため、不正な $tid と $sid をプログラム内で捕捉し、「$ttt->display()」メソッドの実行を停止する必要があります。

assign(String,String|array)
次のように、最初のパラメーターはテンプレートで使用される変数、2 番目のパラメーターはユーザー定義の値を設定します。 obj- >assign('webName','ホームページ名');
$obj->assign('userID',array(23,37,12,18));

display(String|null)
後出力解析テンプレートのパラメータは、出力されるテンプレート ファイルの名前です (クラスの初期化中またはメソッド "setTplFile()" を使用して設定されている場合、このメソッドを使用するときにパラメータを取得する必要はありません)





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