Traversable arayüzü

(PHP 5 >= 5.0.0)

Giriş

Bir sınıf foreach kullanarak çaprazlanabiliyorsa bunu saptayan arayüz.

Tek başına gerçeklenemeyen bir soyut temel arayüz olup ya IteratorAggregate ya da Iterator olarak gerçeklenmelidir.

Bilginize:

Bu arayüzü gerçekleyen yerleşik sınıflar bir foreach oluşumunda kullanılabilir ve IteratorAggregate ya da Iterator olarak gerçeklenmeleri gerekmez.

Bilginize:

Bu dahili bir motor arayüz olup PHP betiklerinde gerçeklenemez. Yerine IteratorAggregate veya Iterator kullanılmalıdır.

Arayüz Sözdizimi

Traversable {
}

Bu arayüzün yöntemleri yoktur. Tek amacı çaprazlanabilir tüm sınıflar için temel arayüz olmaktır.

add a note add a note

User Contributed Notes 3 notes

up
50
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
3
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
-90
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