Heim  >  Artikel  >  Backend-Entwicklung  >  Von PHP basierend auf SPL implementiertes Iteratormuster

Von PHP basierend auf SPL implementiertes Iteratormuster

不言
不言Original
2018-04-23 11:49:201379Durchsuche

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);

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()}";
}

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);

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!

Stellungnahme:
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