Keine Cache-Version

Caching deaktiviert Standardeinstellung für diese Seite:aktiviert (code LNG204)
Wenn die Anzeige zu langsam ist, können Sie den Benutzermodus deaktivieren, um die zwischengespeicherte Version anzuzeigen.

Rechercher une fonction PHP

Objektiteration

PHP 5 bietet eine Möglichkeit Objekte so zu definieren, dass es möglich ist eine Liste von Elementen zu durchlaufen, z.B. mit einem foreach-Statement. Standardmäßig werden alle sichtbaren Eigenschaften für die Iteration benutzt.

Beispiel #1 Einfache Objektiteration

<?php
class MyClass
{
    public 
$var1 'Wert 1';
    public 
$var2 'Wert 2';
    public 
$var3 'Wert 3';

    protected 
$protected 'protected var';
    private   
$private   'private var';

    function 
iterateVisible() {
       echo 
"MyClass::iterateVisible:\n";
       foreach (
$this as $key => $value) {
           print 
"$key => $value\n";
       }
    }
}

$class = new MyClass();

foreach(
$class as $key => $value) {
    print 
"$key => $value\n";
}
echo 
"\n";


$class->iterateVisible();

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

var1 => Wert 1
var2 => Wert 2
var3 => Wert 3

MyClass::iterateVisible:
var1 => Wert 1
var2 => Wert 2
var3 => Wert 3
protected => protected var
private => private var

Wie die Ausgabe zeigt, lief das foreach über alle sichtbaren Eigenschaften, auf die zugegriffen werden kann.

Um es einen Schritt weiter zu treiben, kann man eines der PHP 5 internen Interfaces, nämlich Iterator, implementieren. Dies erlaubt es dem Objekt vorzugeben wie es iteriert wird und welche Werte in jeder Iteration verfügbar sind.

Beispiel #2 Objektiteration mit implementiertem Iterator

<?php
class MyIterator implements Iterator
{
    private 
$var = array();

    public function 
__construct($array)
    {
        if (
is_array($array)) {
            
$this->var $array;
        }
    }

    public function 
rewind() {
        echo 
"zurückspulen\n";
        
reset($this->var);
    }

    public function 
current() {
        
$var current($this->var);
        echo 
"aktuell: $var\n";
        return 
$var;
    }

    public function 
key() {
        
$var key($this->var);
        echo 
"key: $var\n";
        return 
$var;
    }

    public function 
next() {
        
$var next($this->var);
        echo 
"nächstes: $var\n";
        return 
$var;
    }

    public function 
valid() {
        
$var $this->current() !== false;
        echo 
"gültig: {$var}\n";
        return 
$var;
    }
}

$values = array(1,2,3);
$it = new MyIterator($values);

foreach (
$it as $a => $b) {
    print 
"$a$b\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

zurückspulen
aktuell: 1
gültig: 1
aktuell: 1
key: 0
0: 1
nächstes: 2
aktuell: 2
gültig: 1
aktuell: 2
key: 1
1: 2
nächstes: 3
aktuell: 3
gültig: 1
aktuell: 3
key: 2
2: 3
nächstes:
aktuell:
gültig:

Das IteratorAggregate-Interface kann als Alternative zur Implementierung aller Methoden von Iterator verwendet werden. IteratorAggregate erfordert nur die Implementierung einer einzigen Methode, IteratorAggregate::getIterator(), welche eine Instanz einer Klasse, die Iterator implementiert, zurückgeben sollte.

Beispiel #3 Objektiteration mit implementiertem IteratorAggregate

<?php
class MyCollection implements IteratorAggregate
{
    private 
$items = array();
    private 
$count 0;

    
// benötigte Funktion des IteratorAggregate Interface
    
public function getIterator() {
        return new 
MyIterator($this->items);
    }

    public function 
add($value) {
        
$this->items[$this->count++] = $value;
    }
}

$coll = new MyCollection();
$coll->add('Wert 1');
$coll->add('Wert 2');
$coll->add('Wert 3');

foreach (
$coll as $key => $val) {
    echo 
"key/value: [$key -> $val]\n\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

zurückspulen
aktuell: Wert 1
gültig: 1
aktuell: Wert 1
key: 0
key/value: [0 -> Wert 1]

nächstes: Wert 2
aktuell: Wert 2
gültig: 1
aktuell: Wert 2
key: 1
key/value: [1 -> Wert 2]

nächstes: Wert 3
aktuell: Wert 3
gültig: 1
aktuell: Wert 3
key: 2
key/value: [2 -> Wert 3]

nächstes:
aktuell:
gültig:

Hinweis:

Für mehr Beispiele für die Benutzung von Iteratoren siehe auch SPL Erweiterung.

Hinweis:

Anwender von PHP 5.5 oder später sollten auch die Verwendung von Generatoren prüfen, welche eine Alternative zur Erzeugung von Iteratoren anbieten.

Finde eine PHP-Funktion

Deutsche Übersetzung

Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.

Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.

Vielen Dank im Voraus.

Dokument erstellt 30/01/2003, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/php-rf-language.oop5.iterations.html

Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.

Referenzen

  1. Zeigen Sie - html-Dokument Sprache des Dokuments:fr Manuel PHP : http://php.net

Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.

Inhaltsverzeichnis Haut