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 2 notes

up
35
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
-30
mathdegiovani at gmail dot com
8 months 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