static function is_match($items) { return $items instanceof Traversable; } static function get_instance($items) { // ArrayObjects can be used by foreach but cannot be used as an iterator // so we need to get the real iterator. if ($items instanceof ArrayObject) { return $items->getIterator(); } else { return $items; } } } // Register this iterator with Chano. Chano::register_iterator('Chano_Iterators_Iterator'); class Chano_Iterators_Object implements Chano_Iterators_Interface { static function is_match($items) { return $items instanceof stdClass; } static function get_instance($items) { return new ArrayIterator($items); } } // Register this iterator with Chano. Chano::register_iterator('Chano_Iterators_Object');