Maison > Article > développement back-end > Explication détaillée des étapes de l'itérateur implémentées en PHP basée sur SPL
Cette fois, je vais vous apporter une explication détaillée des étapes des itérateurs implémentés en PHP basés sur SPL. Quelles sont les précautions pour les itérateurs implémentés en PHP basés sur SPL. Ce qui suit est un cas pratique, jetons un coup d'oeil.
Maintenant, il y a 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);
D'accord, maintenant il y a deux membres dans le laboratoire LSGO, et maintenant je veux lister tous les membres du département, c'est-à-dire, utilisez une boucle pour obtenir les détails de chaque employé du service.
Ici, nous utilisons l'itérateur fourni par la bibliothèque standard SPL en PHP pour l'implémenter.
"Big Talk Design Patterns " dit ceci :
Modèle d'itérateur : Le modèle d'itérateur est un modèle mature pour parcourir les collections. La clé est de confier la tâche de parcourir la collection à un objet appelé itérateur, qui fonctionne en parcourant et en sélectionnant des objets dans la 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 manière :
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()}"; }
Supplémentaire :
Supposons que maintenant nous voulions savoir combien il y en a dans cette classe Employés du département, s'il s'agit d'un tableau, une fonction count()
est ok, alors pouvons-nous traiter l'objet comme un tableau comme ci-dessus ? La bibliothèque standard SPL fournit l'interface Countable que nous pouvons utiliser :
class Department implements Iterator,Countable{ //前面同上 //实现Countable中要求实现的方法 function count(){ return count($this->_employees); } } //应用: echo "员工数量:"; echo count($lsgo);
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur. le site PHP chinois !
Lecture recommandée :
Détaillé explication du cas du modèle de conception de la méthode d'usine PHP
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!