PHP 5.4.40 Released

La interfaz Traversable

(PHP 5 >= 5.0.0)

Introducción

Interfaz para detectar si una clase puede ser recorrida 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:

Este es un motor interno de interfaz que no puede ser implementado 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 enumerara 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
6
ajf at ajf dot me
3 months 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
53
kevinpeno at gmail dot com
4 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
-97
mathdegiovani at gmail dot com
1 year ago
Note that instanceof Traversable does not work for stdclass objects, so if you are this check (as @kevinpeno) to decide whether you can iterate, it will fail for direct instances.

In particular:

<?php

$obj
= new stdclass();
$obj->prop = 'hello';
var_dump($obj instanceof Traversable);
//outputs bool(false)
?>

My own solution is to check whether the object also descends from stdclass, but that also fails to catch some objects that are iterable.
To Top