helly           Wed Sep 14 23:48:39 2005 EDT

  Modified files:              
    /php-src/ext/spl/examples   recursivearrayiterator.inc 
  Log:
  - MFB
  
http://cvs.php.net/diff.php/php-src/ext/spl/examples/recursivearrayiterator.inc?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/spl/examples/recursivearrayiterator.inc
diff -u /dev/null php-src/ext/spl/examples/recursivearrayiterator.inc:1.2
--- /dev/null   Wed Sep 14 23:48:39 2005
+++ php-src/ext/spl/examples/recursivearrayiterator.inc Wed Sep 14 23:48:38 2005
@@ -0,0 +1,55 @@
+<?php
+
+/** @file recursivearrayiterator.inc
+ * @ingroup Examples
+ * @brief class RecursiveArrayIterator
+ * @author  Marcus Boerger
+ * @date    2003 - 2005
+ *
+ * SPL - Standard PHP Library
+ */
+
+/** @ingroup Examples
+ * @brief   A recursive array iterator
+ * @author  Marcus Boerger
+ * @version 1.0
+ * @since PHP 6.0
+ *
+ * Passes the RecursiveIterator interface to the inner Iterator and provides
+ * the same functionality as FilterIterator. This allows you to skip parents
+ * and all their childs before loading them all. You need to care about
+ * function getChildren() because it may not always suit your needs. The 
+ * builtin behavior uses reflection to return a new instance of the exact same
+ * class it is called from. That is you extend RecursiveFilterIterator and
+ * getChildren() will create instance of that class. The problem is that doing
+ * this does not transport any state or control information of your accept()
+ * implementation to the new instance. To overcome this problem you might 
+ * need to overwrite getChildren(), call this implementation and pass the
+ * control vaules manually.
+ */
+class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator
+{
+       /** @return whether the current element has children
+        */
+       function hasChildren()
+       {
+               return is_array($this->current());
+       }
+
+       /** @return an iterator for the current elements children
+        *
+        * @note the returned iterator will be of the same class as $this
+        */
+       function getChildren()
+       {
+               if (empty($this->ref))
+               {
+                       $this->ref = new ReflectionClass($this);
+               }
+               return $this->ref->newInstance($this->current());
+       }
+       
+       private $ref;
+}
+
+?>
\ No newline at end of file

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to