Programmation en mode état PHP

*文
Libérer: 2023-03-18 16:26:01
original
1560 Les gens l'ont consulté

Qu'est-ce que la programmation en mode état PHP ? Cet article présente principalement l'explication détaillée de la programmation en mode état en PHP, qui est propice à la programmation en collaboration en équipe, j'espère qu'elle sera utile à tout le monde.

Définition
Modèle d'état, également connu sous le nom de modèle d'objets pour l'état, le modèle d'état est le modèle de comportement des objets. Le modèle d'état permet à un objet de modifier son comportement lorsque son état interne change. Cet objet semble avoir changé de classe

Diagramme UML

2015811162847657.jpg (454×146)

Rôle principal dans le modèle d'état
Rôle d'état abstrait (State) : Définir une interface ou une classe abstraite State pour encapsuler le comportement correspondant à un état spécifique de l'objet d'environnement
Rôle d'état concret (ConcreteState) : Chaque classe d'état implémente l'environnement Comportement correspondant à un état de ( Contexte)
Rôle Environnement (Contexte) : Définir l'interface qui intéresse le client et conserver une instance d'une classe d'état spécifique. Une instance de cette classe d'état spécifique donne l'état actuel de cet objet d'environnement


Scénario d'utilisation
Considérons une application d'un système de vote en ligne pour contrôler le même utilisateur, Votez uniquement. Si un utilisateur vote à plusieurs reprises et vote plus de 5 fois, cela sera considéré comme un brossage de vote malveillant. Si un utilisateur vote plus de 8 fois, il doit être ajouté à la liste noire

Pour. utilisez le mode état pour mettre en œuvre, tout d'abord, le processus de vote doit être Différents états sont définis et peuvent être grossièrement divisés en quatre états selon la description ci-dessus : vote normal, vote malveillant et vote sur liste noire. Créez ensuite un objet de gestion des votes (équivalent à Contexte)

Schéma UML


2015811165624664.jpg (467×164)

Exemple de code


 <?php 
 /** 
  * 抽象状态类 
  * @author wzy 
  * 
  */ 
 interface VoteState 
 { 
  /** 
   * 需要实现的公共方法 
   */ 
  public function vote (); 
 } 
 
 /** 
  * 具体状态——正常投票 
  * 
  * @author wzy 
  *   
  */ 
 class NormalVoteState implements VoteState 
 { 
  public function vote () 
  { 
   echo "这是一个正常投票!"; 
  } 
 } 
 /** 
  * 具体状态——恶意投票 
  * 
  * @author wzy 
  *   
  */ 
 class RepeatVoteState implements VoteState 
 { 
  public function vote () 
  { 
   echo "这是一个恶意投票!"; 
  } 
 } 
 /** 
  * 具体状态——黑名单投票 
  * 
  * @author wzy 
  *   
  */ 
 class BlockVoteState implements VoteState 
 { 
  
  public function vote () 
  { 
   echo "这是一个黑名单投票!"; 
  } 
 } 
  
 /** 
  * Context角色 
  */ 
 class VoteManager 
 { 
  
  /** 
   * 投票数量 
   * 
   * @var int 
   */ 
  private $vote_count; 
  
  /** 
   * 状态类实例 
   * 
   * @var object 
   */ 
  private $voteInstance; 
  
  /** 
   * 构造函数,初始化成员属性 
   * 
   * @param int $count    
   */ 
  public function __construct ($count = 1) 
  { 
   $this->vote_count = $count; 
  } 
  
  /** 
   * 客户端调用的接口函数 
   */ 
  public function setState ($count) 
  { 
   if (! is_null($count)) { 
    $this->vote_count = $count; 
   } 
   if ($this->vote_count < 5) { 
    $this->voteInstance = new NormalVoteState(); 
   } else 
    if ($this->vote_count < 8) { 
     $this->voteInstance = new RepeatVoteState(); 
    } else { 
     $this->voteInstance = new BlockVoteState(); 
    } 
    
   $this->voteInstance->vote(); 
  } 
 } 
  
 /** 
  * 模拟客户端操作 
  */ 
  
 $object = new VoteManager(); 
 $object->setState(1); 
 echo "<br>"; 
 $object->setState(6); 
 echo "<br>"; 
 $object->setState(10);
Copier après la connexion


Vérification du mode d'état
Statut et comportement
Donc -appelé L'état d'un objet fait généralement référence à la valeur de l'attribut de l'instance d'objet ; et le comportement fait référence à la fonction de l'objet. Pour être plus précis, la plupart des comportements peuvent être mappés à des méthodes

Le. La fonction du modèle d'état est de séparer les états. Les comportements appellent des fonctions correspondant à différents états en maintenant les changements d'état. En d'autres termes, l'état et le comportement sont liés, et leur relation peut être décrite comme : l'état détermine le comportement

Puisque l'état est modifié pendant l'exécution, le comportement changera également en fonction du changement d'état pendant l'exécution.

Objets d'environnement et de traitement d'état
Dans le modèle d'état, l'environnement (Contexte) est l'objet qui détient l'état, mais l'environnement lui-même ne gère pas les comportements liés à l'état, mais La fonction de traitement de l'état est déléguée à la classe de traitement d'état correspondant à l'état

Dans un traitement d'état spécifique, il est souvent nécessaire d'obtenir les données de l'environnement (Contexte) lui-même. des classes abstraites au lieu d'interfaces, qui peuvent Il sera plus pratique de passer des paramètres

Les clients n'interagissent généralement qu'avec l'environnement (Contexte). Le client peut utiliser l'objet d'état pour configurer un environnement (Contexte). Une fois la configuration terminée, il n'a plus besoin de gérer l'objet d'état. Le client n'est généralement pas responsable du maintien de l'état pendant l'exploitation, ni de l'objet de traitement d'état spécifique qui est utilisé par la suite

Recommandations associées :

Modèles de conception PHP Modèle d'usine simple

La différence entre le modèle d'usine et le modèle Singleton dans le modèle de conception PHP

Polymorphisme PHP et liaison dynamique

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!