Das Traversable-Interface

(PHP 5 >= 5.0.0, PHP 7)

Einführung

Interface, um herauszufinden, ob eine Klasse mittels foreach traversierbar ist.

Das abstrakte Interface kann nicht direkt implementiert werden. Stattdessen müssen Sie es entweder mittels IteratorAggregate oder Iterator implementieren.

Hinweis:

Interne (eingebaute) Klassen, die dieses Interface implementieren, können in foreach-Konstrukten verwendet werden und benötigen keine explizite Implementierung von IteratorAggregate oder Iterator.

Hinweis:

Es handelt sich um ein internes Interface der Engine, das nicht in PHP-Skripten implementiert werden kann. Statt dessen müssen IteratorAggregate oder Iterator verwendet werden. Wenn ein Interface implementiert wird, das Traversable erweitert, ist sicherzustellen, dass IteratorAggregate oder Iterator vor dessen Name in der implements Klausel angegeben wird.

Interface-Übersicht

Traversable {
}

Dieses Interface besitzt keine Methoden, sein einziger Sinn ist es, als Basisinterface für alle traversierbaren Klassen zu dienen.

add a note add a note

User Contributed Notes 3 notes

up
84
kevinpeno at gmail dot com
5 years ago
While you cannot implement this interface, you can use it in your checks to determine if something is usable in for each. Here is what I use if I'm expecting something that must be iterable via foreach.

<?php
   
if( !is_array( $items ) && !$items instanceof Traversable )
       
//Throw exception here
?>
up
27
ajf at ajf dot me
1 year ago
Note that all objects can be iterated over with foreach anyway and it'll go over each property. This just describes whether or not the class implements an iterator, i.e. has custom behaviour.
up
9
cobaltbluedw
6 months ago
NOTE:  While objects and arrays can be traversed by foreach, they do NOT implement "Traversable", so you CANNOT check for foreach compatibility using an instanceof check.

Example:

$myarray = array('one', 'two', 'three');
$myobj = (object)$myarray;

if ( !($myarray instanceof \Traversable) ) {
    print "myarray is NOT Traversable";
}
if ( !($myobj instanceof \Traversable) ) {
    print "myobj is NOT Traversable";
}

foreach ($myarray as $value) {
    print $value;
}
foreach ($myobj as $value) {
    print $value;
}

Output:
myarray is NOT Traversable
myobj is NOT Traversable
one
two
three
one
two
three
To Top