I think you mean instanceof Iterator
, PHP doesn’t have an Iterable
interface. It does have a Traversable
interface though. Iterator
and IteratorAggregate
both extend Traversable
(and AFAIK they are the only ones to do so).
But no, objects implementing Traversable
won’t pass the is_array()
check, nor there is a built-in is_iterable()
function. A check you could use is
function is_iterable($var) {
return (is_array($var) || $var instanceof Traversable);
}
To be clear, all php objects can be iterated with foreach, but only some of them implement Traversable
. The presented is_iterable
function will therefore not detect all things that foreach can handle.