Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der in PHP basierend auf SPL implementierten Iteratorschritte

Detaillierte Erläuterung der in PHP basierend auf SPL implementierten Iteratorschritte

php中世界最好的语言
php中世界最好的语言Original
2018-05-16 15:04:161367Durchsuche

Dieses Mal werde ich Ihnen eine detaillierte Erklärung der Schritte von in PHP basierenden Iteratoren geben. Was sind die Vorsichtsmaßnahmen für Iteratoren, die in PHP basierend auf SPL implementiert sind? Werfen wir einen Blick darauf.

Jetzt gibt es 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 Mitglieder im LSGO-Labor, und jetzt möchte ich alle Mitarbeiter auflisten, also verwenden eine Schleife, um die Details jedes Mitarbeiters in der Abteilung zu erhalten.

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

„Big Talk Design Patterns “ sagt Folgendes:

Iteratormuster : Das Iteratormuster ist ein ausgereiftes Muster zum Durchlaufen von Sammlungen Der Schlüssel besteht darin, die Aufgabe des Durchlaufens der Sammlung an ein Objekt namens Iterator zu übergeben, das Objekte in der 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 auf diese Weise:

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, wir möchten jetzt wissen, wie viele Mitarbeiter die Abteilung hat, wenn Es ist ein Array, eine count()-Funktion ist in Ordnung. Können wir das Objekt also wie oben als Array 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);

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln die chinesische PHP-Website!

Empfohlene Lektüre:

Ausführliche Erläuterung der Schritte zum Hinzufügen, Löschen, Ändern und Abfragen von MongoDB in PHP7

Ausführlich Erläuterung des PHP-Factory-Methodenentwurfsmusters

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der in PHP basierend auf SPL implementierten Iteratorschritte. 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