ホームページ >バックエンド開発 >PHPチュートリアル >PHP5 で MVC 構造を学ぶ_PHP チュートリアル

PHP5 で MVC 構造を学ぶ_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 16:11:15816ブラウズ


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 環境でのみテストされています。解凍後、次のディレクトリ構造が表示されるはずです:

./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]
「例6」を参照してください。

2. 次のような foreach ループを使用します。配列 $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の値は2です
{elseif:$a == 3}
Variable$ の値a は 3 です
{/if}
[/tplCode]
具体的な使用方法については、「example2」と「example6」を参照してください

4.
{tplCode}
{includetpl: などのテンプレート ファイルをテンプレートに含めます。 head.tpl}
{/tplCode}
テンプレート ファイル「head.tpl」がここに含まれます。含まれるテンプレート ファイルは、次のようなテンプレートに含める必要があります

5.
{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}

{/for}
{/tplCode}
パラメータの説明:
5: ループが 5 から始まることを示します
1000: ループが 1000 で終了することを示します
1: の増分を示します各ループは 1、$n++ に相当します
$i: 各ループの値が取得されることを示します
(上記の「5」。「1000」や「1」などの定数は、次のような変数に置き換えることもできます: {for:$num,$max,$step,$i}、変数は割り当てられた「assign()」メソッドを使用してプログラム内で使用されます)
次のコードも参照してください (理解のために):
[tplCode]
{対象:500,30,-2,$i}
ループを 500 から開始し、30 で終了するまで毎回 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 ループをサポートします。
実際の使用中に $ 属性を変更した場合 cmpCheck が true に設定されている場合、PHP プログラムは実行されるたびにコンパイルされます。それ以外の場合、プログラムはコンパイルされた PHP ファイルの存在時間に基づいて再コンパイルするかどうかを決定します。この属性のデフォルト値は true で、使用時は通常 false に設定されます (速度を上げることができます)
次のようなメソッドを設定します: $tttObj->setCmpCheck(true); 最大の欠点 3.このプログラムの欠点は、プログラム内に表示される構文エラー情報を正確に取得できないことです。
4. キャッシュ機能は当面サポートされていません。何か良いアイデアがあれば、教えてください:-)
5.混合モードはテンプレートを PHP ファイルにコンパイルするために使用されるため、間違えないでください (もちろん、テンプレートは大文字と小文字の書き込みをサポートしています。つまり、{math:38*7} と {MatH:38) を記述することになります。 *7} も同様の効果があります)、「{foreach:$data,k,$v}」と入力するとコンパイルは成功しますが、「$」記号があるため、実行時に構文エラーが発生します。 「k」の前に欠落があります。エラーをキャッチするために各行を構文解析するコードをすでに作成しましたが、コードが数百行に達すると、時間がかかることがわかりました。コードが比較的小さい場合は、大丈夫です。しかし、多すぎるとパフォーマンスの低下につながります。そして、PHP 自体には非常に優れたエラー メッセージ プロンプトがあるのですが、コードの各行を分析していませんでした。上記のロゴでは、パラメーターに引用符や二重引用符がありません (条件判定ステートメントを除く)。それに注意してください:-)

4.

1. という名前の PHP ファイルを作成します。 php を現在のディレクトリ (つまり "./") に保存すると、内容は次のようになります:
require_once "./ttt/ttt.php";//クラス ファイルを導入します
$ttt = new TTT ();//3Tテンプレートクラスの初期化 Example
$ttt->setTplDir("./tpl/");//コンパイルが必要なテンプレートファイルが格納されているディレクトリ
$ttt->setCmpDir(". /cmp/");//コンパイル済みファイルの保存ディレクトリ
$ttt->assign('title', '空の色'); //変数を設定
$ttt->assign('content', '青、良い天気、雲ひとつない、晴れ') ;//変数を設定
$ttt->assign('foot','Welcome welcome');//変数を設定
$ttt->display('first.tpl ');//出力
?>

2. tpl ファイルを作成します (「first.tpl」という名前で、ディレクトリ「./tpl/」に保存されます)。




{$title} <br></head> <br><body> <br>{$content}<br> <br><br> <br>{$foot} <br></body> <br></html> <br><br>3 .ブラウザで http://domain/path/to/3tvx.x/3t/first.php を参照して、最初に PHP 実行環境を設定する必要があります。 <br>4. 他のサンプルを参照してください。プログラムに付属する「サンプル」シリーズ... <br>5. クラス属性 (部分) <br>$tplDir:String,"./tpl/" <br>テンプレート ファイルのディレクトリロードする必要のあるものはここからロードされます<br><br>$cmpDir: String,"./cmp/" <br>コンパイル済みPHPファイル格納ディレクトリ<br><br>$cheDir:String,"./che/" <br><br>$tplFile:String,"" <br>テンプレート ファイル、解析対象のメイン テンプレート ファイル<br><br> $startLeft:String,"{" <br>テンプレート変数の左境界記号は、setLeft(String $s) メソッドを通じて自分で設定できます<br><br>$startRight:String 、"}" <br>テンプレート変数の右境界記号は、setRight(String $s) メソッドを通じて自分で設定できます <br><br><br> 6. クラスメソッド (部分) <br>TTT(String|null) <br>クラス コンストラクター、直接設定できますここで解析が必要なテンプレート: $obj->TTT("head.tpl"); <br><br>setLeft(String) <br> テンプレート変数 "$startLeft" の左境界を設定します (デフォルトは "{" です) <br><br> setRight(String) <br>テンプレート変数 "$startRight" の左境界を設定します。デフォルトは "{" です。 <br><br>setTplDir(String) <br> テンプレートのストレージ パスを設定します。このメソッドの同じ名前は "setTemplatesFile() " <br><br>setCmpDir(String) <br> テンプレートのコンパイル後の保存パスを設定します。このメソッドの同じ名前は "setCompilesFile()" です。 <br><br>setCheFile(String) <br> キャッシュされたテンプレート ファイルのディレクトリを設定します。このメソッドの同じ名前は " setCachesFile()" <br><br>setCacheFilter(String| array) <br>テンプレートのキャッシュ機能を使用した場合、このメソッドで設定したファイルはキャッシュされません。 <br><br>setWordsFilter(array) <br>設定に適さない文字や文字列を設定$ttt->setWordsFilter ('abc','xyz'); のように Web サイトに表示します。Web ページ内のすべての "abc" を "xyz" に置き換えます <br><br>setWordsFile(String|array) <br>ウェブサイト上での表示に適さない文字や文字列がある場合は、このメソッドで設定したファイル内の文字や文字列が「setWordsFilter()」メソッドの影響を受けずにそのまま表示されます<br><br>setQuery(String)<br>このメソッドはテンプレートのキャッシュ機能を使用する場合にのみ使用されます。主に、キャッシュ ファイルが重複しないように固有の文字列を設定するために使用されます。設定しない場合、テンプレートは自動的に取得されますが、プログラムは安全ではありません。プログラムから異なるパラメータを取得し続ける限り、N 回後には常に異なるキャッシュ ファイルが生成されます。もちろん、これらはキャッシュ機能を使用したことによってのみ発生すると思います。このメソッドは一意の文字列を設定するために使用するものではないため、正しく設定し、プログラム内で GET または POST を処理します。このメソッドは "$ttt->setQuery("typeid=$tid&msgid) のように使用できます。 =$sid")"。ここで、悪意のあるユーザーが別の $tid または $sid を送信すると、上記の攻撃イベントが発生するため、不正な $tid と $sid をプログラムでキャプチャし、" の実行を停止する必要があります。 $ttt->display()」メソッド。 <br><br>assign(String,String|array) <br>次のように、最初のパラメータはテンプレートで使用される変数、2 番目のパラメータはユーザー定義の値です。 obj- >assign('webName','ホームページ名'); <br>$obj->assign('userID',array(23,37,12,18)); <br><br>display(String|null) <br>出力テンプレートの解析後、パラメーターは出力されるテンプレート ファイルの名前になります (クラスの初期化中またはメソッド「setTplFile()」を使用して設定されている場合は、パラメーターなしでこのメソッドを使用できます) <br><br><br> <br> </p> <p align="left"></p> <div style="display:none;">http://www.bkjia.com/PHPjc/313993.html<span id="url" itemprop="url"></span>www.bkjia.com<span id="indexUrl" itemprop="indexUrl"></span>tru​​e<span id="isOriginal" itemprop="isOriginal"></span>http://www.bkjia.com/PHPjc/313993.html<span id="isBasedOnUrl" itemprop="isBasedOnUrl"></span>技術記事<span id="genre" itemprop="genre"></span> 1. はじめに 現在、WEB アプリケーションを開発する場合、最も一般的な方法の 1 つは、「MVC」構造を使用して WEB アプリケーションを開発することです。 <span id="description" itemprop="description"></span> </div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="オブジェクト指向 PHP データベース操作の利点_PHP チュートリアル" href="https://m.php.cn/ja/faq/312458.html">オブジェクト指向 PHP データベース操作の利点_PHP チュートリアル</a></span><span>次の記事:<a class="dBlack" title="オブジェクト指向 PHP データベース操作の利点_PHP チュートリアル" href="https://m.php.cn/ja/faq/312460.html">オブジェクト指向 PHP データベース操作の利点_PHP チュートリアル</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="https://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/2.html" title="正規表現内のすべての式記号 (概要)" class="aBlack">正規表現内のすべての式記号 (概要)</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!</p></div><div class="footermid"><a href="https://m.php.cn/ja/about/us.html">私たちについて</a><a href="https://m.php.cn/ja/about/disclaimer.html">免責事項</a><a href="https://m.php.cn/ja/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>