Von PHP basierend auf SPL implementiertes Iteratormuster

不言
Freigeben: 2023-03-24 17:18:01
Original
1366 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich der von PHP basierende Iteratormodus vorgestellt. Er beschreibt kurz das Konzept und Prinzip des Iteratormodus und analysiert die relevanten Bedienfähigkeiten und Vorsichtsmaßnahmen für die Verwendung von SPL zur Implementierung des Iteratormodus in PHP Beispiele sind erforderlich. Freunde können sich auf

beziehen. Dieser Artikel beschreibt den von PHP basierenden Iteratormodus. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Es gibt jetzt zwei Kategorien, Abteilungskategorie und Mitarbeiterkategorie:

//部门类
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);
Nach dem Login kopieren

Okay, jetzt gibt es zwei Abteilungsmitglieder im LSGO-Labor. Jetzt möchte ich alle Abteilungsmitglieder auflisten, indem ich eine Schleife verwende, um die Details jedes Mitarbeiters in der Abteilung abzurufen.

Hier verwenden wir den von der SPL-Standardbibliothek in PHP bereitgestellten Iterator, um ihn zu implementieren.

Das sagt „Dahua Design Patterns“:

Iteratormuster: Das Iteratormuster ist ein ausgereiftes Muster zum Durchlaufen von Sammlungen. Der Schlüssel zum Iteratormuster liegt in der Übergabe der Aufgabe des Durchlaufens Übertragen Sie die Sammlung an ein Programm mit der Bezeichnung „Ein Iteratorobjekt“, das Objekte in einer Sequenz durchläuft und auswählt, ohne dass der Client-Programmierer die zugrunde liegende Struktur der Sammlungssequenz kennen oder sich darum kümmern muss.

Kurz gesagt besteht die Funktion des Iteratormusters darin, den Zugriff auf alle Komponenten komplexer Datenstrukturen mithilfe von Schleifen zu ermöglichen

Wenn unser Objekt eine Iteration implementieren möchte, veranlassen wir diese Klasse, Iterator zu implementieren (bereitgestellt). (von der SPL-Standardbibliothek) ist dies eine Iteratorschnittstelle. Um diese Schnittstelle zu implementieren, müssen wir die folgende Methode implementieren:

current(), diese Funktion gibt das aktuelle Datenelement zurück
key() , diese Funktion gibt den Schlüssel des aktuellen Datenelements oder die Position des Elements in der Liste zurück
next() Diese Funktion verschiebt den Schlüssel oder die Position des Datenelements nach vorne
rewind() Schlüsselwert oder Position
valid(), diese Funktion gibt einen Bool-Wert zurück, der angibt, ob der aktuelle Schlüssel oder die aktuelle Position auf den Datenwert zeigt

Nach der Implementierung der Iterator-Schnittstelle und der angegebenen Methoden kann PHP das wissen Objekte dieses Typs müssen iteriert werden.

Wir überarbeiten die Department-Klasse folgendermaßen:

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()}";
}
Nach dem Login kopieren

Zusätzlich:

Angenommen Jetzt möchten wir wissen, wie viele Mitarbeiter es in dieser Abteilung gibt. Wenn es sich um ein Array handelt, ist eine count()-Funktion in Ordnung. Können wir das Objekt dann wie oben behandeln? Die Countable-Schnittstelle steht uns in der SPL-Standardbibliothek zur Verfügung:

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

Dieser Artikel bezieht sich auf „Umfassendes Verständnis der fortgeschrittenen PHP-Techniken, objektorientierte und Kerntechnologien“

Verwandte Empfehlungen:

Eine kurze Analyse der PHP-SPL-Anwendung

Detaillierte Erklärung, wie PHP generiert QR-Codes basierend auf der phpqrcode-Klasse

Das obige ist der detaillierte Inhalt vonVon PHP basierend auf SPL implementiertes Iteratormuster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!