diff --git a/Mustache.php b/Mustache.php index 88727c5..f06edca 100644 --- a/Mustache.php +++ b/Mustache.php @@ -597,7 +597,7 @@ class Mustache { * @return bool */ protected function _varIsIterable($var) { - return is_object($var) || (is_array($var) && !array_diff_key($var, array_keys(array_keys($var)))); + return $var instanceof Traversable || (is_array($var) && !array_diff_key($var, array_keys(array_keys($var)))); } } diff --git a/examples/sections_iterator_object/Sections_Iterator_Object.php b/examples/sections_iterator_object/Sections_Iterator_Object.php new file mode 100644 index 0000000..e517fe0 --- /dev/null +++ b/examples/sections_iterator_object/Sections_Iterator_Object.php @@ -0,0 +1,41 @@ + 'And it worked the second time.'), + array('item' => 'As well as the third.'), + ); + + public function rewind() { + $this->_position = 0; + } + + public function current() { + return $this->_data[$this->_position]; + } + + public function key() { + return $this->_position; + } + + public function next() { + ++$this->_position; + } + + public function valid() { + return isset($this->_data[$this->_position]); + } +} \ No newline at end of file diff --git a/examples/sections_iterator_object/sections.mustache b/examples/sections_iterator_object/sections.mustache new file mode 100644 index 0000000..44dfce4 --- /dev/null +++ b/examples/sections_iterator_object/sections.mustache @@ -0,0 +1,5 @@ +* {{ start }} +{{# middle }} +* {{ item }} +{{/ middle }} +* {{ final }} \ No newline at end of file diff --git a/examples/sections_iterator_object/sections.txt b/examples/sections_iterator_object/sections.txt new file mode 100644 index 0000000..e6b2d7a --- /dev/null +++ b/examples/sections_iterator_object/sections.txt @@ -0,0 +1,4 @@ +* It worked the first time. +* And it worked the second time. +* As well as the third. +* Then, surprisingly, it worked the final time. \ No newline at end of file