PHP 5.6.24 is released

A interface Traversable

(PHP 5 >= 5.0.0, PHP 7)

Introdução

Interface para detectar se uma classe é percorrível utilizando o foreach.

Interface básica abstrata que não pode ser implementa sozinha. Ao invés, deve ser implementada as interfaces IteratorAggregate ou Iterator.

Nota:

Classes internas (built-in) que implementam essa interface podem ser utilizadas em um construtor de linguagem foreach e não precisam implementar as interfaces IteratorAggregate ou Iterator.

Nota:

É uma interface interna do motor do PHP que não pode ser implementada em scripts PHP. A interface IteratorAggregate ou Iterator deve ser implementada em substituição. Ao implementar uma interface que estende Traversable, tenha certeza de colocar a interface IteratorAggregate ou Iterator antes na cláusula de implementações.

Resumo da Interface

Traversable {
}

Esta interface não possui métodos, seu único propósito é de servir como interface base para todas as classes percorríveis.

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