ホームページ >バックエンド開発 >PHPチュートリアル >PHP の MVC パターン アプリケーション スキルのサンプル コード

PHP の MVC パターン アプリケーション スキルのサンプル コード

怪我咯
怪我咯オリジナル
2017-07-12 14:28:441390ブラウズ

MVCパターンとは「Model-View-Controller」の略で、中国語訳は「Model-View-Controller」です。 MVC アプリケーションは常に次の 3 つの部分で構成されます。イベント (event) により、コントローラーはモデルまたはビュー、あるいはその両方を同時に変更します。コントローラーがモデルのデータまたはプロパティを変更する限り、依存するすべてのビューは自動的に更新されます。同様に、コントローラーがビューを変更するたびに、基礎となるモデルからデータを取得してビュー自体が更新されます。 MVC パターンは、Smalltalk 言語研究グループによって最初に提案され、ユーザー対話アプリケーションで使用されています。 smalltalk 言語と Java 言語には多くの類似点があります。これらは両方ともオブジェクト指向言語です。SUN が petstore (ペット ストア) サンプル アプリケーションで Web アプリケーションを開発するためのアーキテクチャ パターンとして MVC パターンを推奨したのは当然です。 MVC パターンは、実際には他のパターンのコラボレーションを必要とするアーキテクチャ パターンです。 J2EE モード ディレクトリでは、通常、Service to Worker モードが実装されており、Service to Worker モードは、集中コントローラ モード、ディスパッチャ モード、およびページ ヘルパー モードで構成できます。 Struts は MVC のビューとコントローラーの部分のみを実装します。モデル部分は開発者自身が実装する必要があるため、開発者はモデルを Struts フレームワークに適用できます。レベルの動作では、モデル自体は独自の状態を管理し、その状態に対するすべての操作を処理します。モデルが変更されると、システムはそのビューとコントローラーの関係を維持します。対応するビューに通知する責任もあります。 ビューは、管理モデルに含まれるデータを視覚的に表現したものです。モデルには複数のビューを持つことができますが、Swing ではこれが起こることはほとんどありません。

コントローラーは、モデルとユーザー間のインタラクションの制御を管理します。モデルの状態が変化したときに状況を処理するためのいくつかのメソッドが提供されます。

php で MVC パターンを使用する

まず、例を示します:

シンプルな
記事表示システム
シンプル期間中、この記事システムは読み取り専用であると想定します。つまり、この例は記事の出版は関係ありません。今から始めます。 データベースの読み取りだけなので、2つのインターフェイスを定義しました

Interface DataOperation 
{ 
   public function select($info); 
   public function selectNum($info); 
}

上記のインターフェイスはデータを読み取るためのインターフェイスを定義し、
selectメソッド

は必要な記事を返します。 selectNum メソッドは、ページング表示に使用される記事の総数を返します。 $info はクエリ条件を格納するために使用される配列です

Interface DataSource 
{ 
   public static function getInstance(); 
}
ここではデータベースを操作していると仮定し、DataSource がインターフェイスを定義し、このインターフェイスを実装するすべてのインスタンス クラスが静的オブジェクトを取得します

Interface Controller 
{ 
   public function pop(); 
   public function push(); 
   public function execute(); 
} 
Interface View 
{ 
   public function display(); 
}

それでは、やってみましょう
以下は DataSource インターフェースを実装するクラスを定義します。このクラスは

単一ケース パターン


class DataBaseSource implements DataSource 
{ 
   public static $instance = null; 
   public static function getInstance() 
   { 
       if(self::$instance == null) 
       { 
           self::$instance == new PDO("mysql:host=localhost;dbname=article","root","123456"); 
       } 
       return self::$instance; 
   } 
}
を使用して、DataOperation を実装するための
抽象クラス を定義します。これを抽象クラスに含めます すべてのサブクラスがこのオブジェクトを共有できるようにデータベース オブジェクトを初期化します

abstract class DataBaseOperation implements DataOperation 
{ 
   protected $db = null;  
   public function construct() 
   { 
       $this->db = DataBaseSource::getInstance(); 
   } 
   public function select($info); 
}
次に、抽象クラス DataBaseOperation を実装するビジネス サブクラスを作成します

class Tech extends DataBaseOperation 
{ 
   public function select($info) 
   { 
       //在这里实现你的代码 
   } 
   public function selectNum($info) 
   { 
       //在这里实现你的代码 
   } 
}

ビジネス ロジック層を実装しました。以下はコントロール層です

class ViewController implements Controller 
{ 
   private $mod = array(); 
   public function push($key,$value); 
   { 
       //实现你的代码,将类注册进$this->mod; 
   } 
   public function pop($key) 
   {         
       //实现你的代码,将$this->mod[$key]值为null; 
   } 
   public function execute($key) 
   { 
       //在这里实现你的代码,生成实例.注意利用php5新的特性,异常的处理 
   } 
}

さて、これがインターフェイスビューが実装されるプレゼンテーション層です


abstract ArticleView implements View 
{ 
   protected $smarty = null; 
   public function construct() 
   { 
       $this->smarty = new Smarty(); 
       ///下面你可以定义smarty的一些属性值 
   } 
}

科学論文の表示ページなどの特定のページ


class TechArticleView extends ArticleView 
{ 
   public function display() 
   { 
       //实现你的代码,调用Tech类和更多的DataBaseOperation子类 
   } 
}

さて、ここがメインの入り口ですIndex.php


try 
{ 
   $viewController = new ViewController(); 
   $viewController->push("tech",TechArticleView);   
//持续的增加   
   $mod = $_GET["mod"]:$_GET["mod"]:$_POST["mod"]; 
   //最后 
   $viewController->execute($key); 
} 
catch(
Exception
 $e) 
{ 
       //如何处理异常就是你的事了 
}

以上がPHP の MVC パターン アプリケーション スキルのサンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。