ホームページ >バックエンド開発 >PHPチュートリアル >PHP5 で MVC 構造を学ぶ_PHP チュートリアル
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/」に保存されます)。