Maison > développement back-end > tutoriel php > Modèle d'itérateur implémenté par PHP basé sur SPL

Modèle d'itérateur implémenté par PHP basé sur SPL

不言
Libérer: 2023-03-24 17:18:01
original
1399 Les gens l'ont consulté

Cet article présente principalement le mode itérateur implémenté par PHP basé sur SPL. Il décrit brièvement le concept et le principe du mode itérateur et analyse les compétences opérationnelles et les précautions pertinentes pour utiliser SPL pour implémenter le mode itérateur en PHP sous la forme de exemples. Il est obligatoire que les amis puissent se référer à

Cet article décrit le mode itérateur implémenté par PHP basé sur SPL. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Il existe désormais deux catégories, la catégorie Département et la catégorie Employé :

//部门类
class Department{
  private $_name;
  private $_employees;
  function __construct($name){
    $this->_name = $name;
    $this->employees = array();
  }
  function addEmployee(Employee $e){
    $this->_employees[] = $e;
    echo "员工{$e->getName()}被分配到{$this->_name}中去";
  }
}
//员工类
class Employee{
  private $_name;
  function __construct($name){
    $this->_name = $name;
  }
  function getName(){
    return $this->_name;
  }
}
//应用:
$lsgo = new Department('LSGO实验室');
$e1 = new Employee("小锦");
$e2 = new Employee("小猪");
$lsgo->addEmployee($e1);
$lsgo->addEmployee($e2);
Copier après la connexion

D'accord, il y a maintenant deux membres du département dans le laboratoire LSGO. Maintenant, je veux lister tous les membres du département, ce qui consiste à utiliser une boucle pour obtenir les détails de chaque employé du département.

Ici, nous utilisons l'itérateur fourni par la bibliothèque standard SPL en PHP pour l'implémenter.

Voici ce que dit "Dahua Design Patterns" :

Modèle d'itérateur : le modèle d'itérateur est un modèle mature pour parcourir les collections. La clé du modèle d'itérateur est de confier la tâche de parcours. la collection dans un programme appelé Un objet itérateur qui fonctionne en parcourant et en sélectionnant des objets dans une séquence sans que le programmeur client ait à connaître ou à se soucier de la structure sous-jacente de la séquence de collection.

La fonction du modèle itérateur en bref est de permettre d'accéder à tous les composants de structures de données complexes à l'aide de boucles

Si notre objet veut implémenter l'itération, nous faisons en sorte que cette classe implémente Iterator (à condition par la bibliothèque standard SPL), il s'agit d'une interface itératrice Afin d'implémenter cette interface, nous devons implémenter la méthode suivante :

current(), cette fonction renvoie la donnée courante
key(). , cette fonction Renvoie la clé de l'élément de données actuel ou la position de l'élément dans la liste
next() Cette fonction déplace la clé ou la position de l'élément de données vers l'avant
rewind(). valeur de clé ou position
valid(), cette fonction renvoie une valeur booléenne, indiquant si la clé ou la position actuelle pointe vers la valeur de données

Après avoir implémenté l'interface Iterator et les méthodes spécifiées, PHP peut savoir que les objets de ce type doivent être itérés.

Nous refactorisons la classe Department de cette façon :

class Department implements Iterator
{
  private $_name;
  private $_employees;
  private $_position;//标志当前数组指针位置
  function __construct($name)
  {
    $this->_name = $name;
    $this->employees = array();
    $this->_position = 0;
  }
  function addEmployee(Employee $e)
  {
    $this->_employees[] = $e;
    echo "员工{$e->getName()}被分配到{$this->_name}中去";
  }
  //实现 Iterator 接口要求实现的方法
  function current()
  {
    return $this->_employees[$this->_position];
  }
  function key()
  {
    return $this->_position;
  }
  function next()
  {
    $this->_position++;
  }
  function rewind()
  {
    $this->_position = 0;
  }
  function valid()
  {
    return isset($this->_employees[$this->_position]);
  }
}
//Employee 类同前
//应用:
$lsgo = new Department('LSGO实验室');
$e1 = new Employee("小锦");
$e2 = new Employee("小猪");
$lsgo->addEmployee($e1);
$lsgo->addEmployee($e2);
echo "LSGO实验室部员情况:";
//这里其实遍历的$_employee
foreach($lsgo as $val){
  echo "部员{$val->getName()}";
}
Copier après la connexion

Supplémentaire :

Supposons maintenant nous voulons savoir combien d'employés il y a dans ce département. S'il s'agit d'un tableau, une fonction count() conviendra. Alors pouvons-nous traiter l'objet comme un tableau comme ci-dessus ? L'interface Countable est fournie dans la bibliothèque standard SPL pour que nous puissions l'utiliser :

class Department implements Iterator,Countable{
  //前面同上
  //实现Countable中要求实现的方法
  function count(){
    return count($this->_employees);
  }
}
//应用:
echo "员工数量:";
echo count($lsgo);
Copier après la connexion

Cet article fait référence à "Compréhension approfondie des techniques avancées PHP, orientées objet et technologies de base"

Recommandations associées :

Une brève analyse de l'application PHP SPL

Explication détaillée de la façon dont PHP génère Codes QR basés sur la classe phpqrcode

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