Maison >développement back-end >tutoriel php >Exemple de code de compétences en application de modèles MVC en php

Exemple de code de compétences en application de modèles MVC en php

怪我咯
怪我咯original
2017-07-12 14:28:441390parcourir

Le modèle MVC est l'abréviation de "Model-View-Controller", et la traduction chinoise est "Model-View-Controller". Les applications MVC se composent toujours de ces trois parties. Un événement (événement) amène le contrôleur à modifier le modèle ou la vue, ou les deux en même temps. Tant que le contrôleur modifie les données ou les propriétés des modèles, toutes les vues dépendantes seront automatiquement mises à jour. De même, chaque fois que le contrôleur modifie la vue, la vue s'actualise en obtenant les données du modèle sous-jacent. Le modèle MVC a été proposé pour la première fois par le groupe de recherche sur le langage Smalltalk et est utilisé dans les applications d'interaction utilisateur. Il existe de nombreuses similitudes entre le langage smalltalk et le langage java. Ce sont tous deux des langages orientés objet Naturellement, SUN a recommandé le modèle MVC comme modèle architectural pour le développement d'applications Web dans l'exemple de l'animalerie. application. Le modèle MVC est un modèle architectural qui nécessite en réalité la collaboration d'autres modèles. Dans le répertoire du mode J2EE, le mode service vers travailleur est généralement implémenté, et le mode service vers travailleur peut être composé du mode contrôleur centralisé, du mode répartiteur et du mode Page Helper. Struts implémente uniquement les parties View et Controller de MVC. La partie Model doit être implémentée par les développeurs eux-mêmes. Struts fournit la classe abstraite Action afin que les développeurs puissent appliquer Model au framework Struts. comportement au niveau. , il gère son propre état et gère toutes les opérations sur l'état. Le modèle lui-même ne sait pas qui utilise sa propre vue et son propre contrôleur. Le système maintient la relation entre lui et la vue. est également chargé de notifier la vue correspondante.

View représente une représentation visuelle des données contenues dans le modèle de gestion. Un modèle peut avoir plusieurs vues, mais c'est rarement le cas dans Swing.

Le Contrôleur gère le contrôle de l'interaction entre le modèle et l'utilisateur. Il fournit quelques méthodes pour gérer les situations où l'état du modèle change.

Utilisation du modèle MVC en php
Tout d'abord, permettez-moi de donner un exemple :
Un simpleaffichage d'articleSystème
Dans une période simple, nous supposons que ce système d'articles est uniquement en lecture, ce qui signifie que cet exemple n'impliquera pas la publication de l'article, commence maintenant.
Comme cela implique uniquement la lecture de la base de données, j'ai défini deux interfaces

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

L'interface ci-dessus définit l'interface de lecture des données, et la méthode select retournera le requis article. La méthode selectNum renvoie le nombre total d'articles, utilisé pour l'affichage de la pagination. $info est un tableau utilisé pour stocker les conditions de requête

Interface DataSource 
{ 
   public static function getInstance(); 
}

Ici, nous supposons que nous exploitons une base de données, DataSource définit une interface et toutes les classes d'instance qui implémentent cette interface obtiendront un objet statique

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

D'accord, implémentons-le.
Ce qui suit définit une classe pour implémenter l'interface DataSource. Cette classe utilise le modèle de cas unique

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; 
   } 
}
Définir une

classe abstraite pour implémenter DataOperation Nous voulons partager une connexion à la base de données, j'initialise donc l'objet de base de données dans la classe abstraite, afin que toutes les sous-classes puissent partager cet objet

abstract class DataBaseOperation implements DataOperation 
{ 
   protected $db = null;  
   public function construct() 
   { 
       $this->db = DataBaseSource::getInstance(); 
   } 
   public function select($info); 
}
Maintenant, je vais écrire une sous-classe métier pour implémenter la classe abstraite DataBaseOperation



class Tech extends DataBaseOperation 
{ 
   public function select($info) 
   { 
       //在这里实现你的代码 
   } 
   public function selectNum($info) 
   { 
       //在这里实现你的代码 
   } 
}
Nous avons implémenté la couche de logique métier, et ce qui suit est la couche de contrôle


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新的特性,异常的处理 
   } 
}
Bon, voici la couche de présentation, où Interface View


abstract ArticleView implements View 
{ 
   protected $smarty = null; 
   public function construct() 
   { 
       $this->smarty = new Smarty(); 
       ///下面你可以定义smarty的一些属性值 
   } 
}
des pages spécifiques, comme la page d'affichage des articles scientifiques


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


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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn