Posted By

WouterJ on 07/15/12


Tagged


Versions (?)

ClassFilterIterator


 / Published in: PHP
 

Filter classes by name

  1. /**
  2.  * ClassFilterIterator.
  3.  *
  4.  * Filter classes by name
  5.  */
  6. class ClassFilterIterator extends \FilterIterator
  7. {
  8. protected $contains;
  9.  
  10. public function __construct(\Traversable $iterator, $contains)
  11. {
  12. $this->contains = $contains;
  13.  
  14. parent::__construct($iterator);
  15. }
  16.  
  17. public function accept()
  18. {
  19. return preg_match('/'.preg_quote($this->contains).'/i', $this->current());
  20. }
  21. }
  22.  
  23. /**
  24.  * Countable Append Iterator
  25.  */
  26. class CountableAppendIterator extends \AppendIterator implements \Countable
  27. {
  28. public function count()
  29. {
  30. return count(iterator_to_array($this));
  31. }
  32. }
  33.  
  34. /**
  35.  * Example
  36.  **/
  37.  
  38. $append = new CountableAppendIterator();
  39. $classes = new \ArrayIterator(get_declared_classes());
  40.  
  41. $zendClasses = new ClassFilterIterator($classes, 'Zend');
  42. $append->append($zendClasses);
  43.  
  44. // herhaal dit mocht je framework klassen gebruiken die niet Zend bevatten, bijv. doctrine:
  45. // $doctrineClasses = new ClassFilterIterator($classes, 'Doctrine');
  46. // $append->append($doctrineClasses);
  47.  
  48. // het aantal klassen
  49. echo count($append);

Report this snippet  

You need to login to post a comment.