2015-07-29 3 views

ответ

11

Используйте instanceof, чтобы определить, является ли объект Traversable

if($variable instanceof \Traversable) { 
    // is Traversable 
} 
+6

маленькое примечание, чтобы добавить, что если этот код не в глобальном пространстве имен будет оценивать в 'false' если Traversable не импортируется или полностью квалифицирован, поэтому ОП следует добавить' использовать Traversable, 'или использовать' \ Traversable' к их коду. –

+4

Следует отметить, как указано в комментариях на странице Traversable phpdoc, что объекты и массивы могут быть пронумерованы с помощью чего-то вроде foreach, но не являются экземплярами Traversable. – Scott

11

is_iterable может быть использован, так как PHP 7.1.

// https://wiki.php.net/rfc/iterable 
var_dump(
    true === is_iterable([1, 2, 3]), 
    true === is_iterable(new ArrayIterator([1, 2, 3])), 
    true === is_iterable((function() { yield 1; })()) 
);