La interfaz Traversable

(PHP 5 >= 5.0.0, PHP 7)

Introducción

Interfaz para detectar si una clase puede recorrerse mediante foreach.

Una interfaz abstracta base no puede ser implementada sola. En su lugar, debe ser implementada con IteratorAggregate o con Iterator.

Nota:

Las clases internas que implementan esta interfaz pueden ser usadas en una construcción foreach y no necesitan implementar IteratorAggregate o Iterator.

Nota:

Esta es una interfaz del motor interno que no puede ser implementada en scripts de PHP. Se debe emplear en su lugar o IteratorAggregate, o bien Iterator. Cuando se implementa una interfaz que extiende a Traversable, asegúrese de enumerar IteratorAggregate o Iterator antes de su nombre en la cláusula de implementación.

Sinopsis de la Interfaz

Traversable {
}

Esta interfaz no tiene métodos; su único propósito es servir de interfaz base para todas las clases que se pueden recorrer.

add a note add a note

User Contributed Notes 3 notes

up
84
kevinpeno at gmail dot com
6 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
8 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