ClassFinder.php 1.85 KiB
<?php
/*
 * © 2016 IRSTEA
 * Guillaume Perréal <guillaume.perreal@irstea.fr>
 * Tous droits réservés.
 */
namespace Irstea\PlantUmlBundle\Finder;
use ArrayIterator;
use Irstea\PlantUmlBundle\Model\Filter\DirectoryFilter;
use ReflectionClass;
use Symfony\Component\Config\Definition\Exception\Exception;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Finder\SplFileInfo;
/**
 * Description of ClassFinder
 * @author Guillaume Perréal <guillaume.perreal@irstea.fr>
class ClassFinder implements FinderInterface
    /**
     * @var string[]
    private $directories;
    /**
     * @var \ReflectionClass
    private $classes = null;
    public function __construct($directories)
        $this->directories = $directories;
    private function initialize()
        $files = Finder::create()
            ->in($this->directories)
            ->files()
            ->name('*.php')
            ->getIterator();
        foreach($files as $file)
            /* @var $file SplFileInfo */
            $path = $file->getPathname();
            try {
                irstea_plantmul_include($path);
            } catch(Exception $ex) {
                printf("%s: %s (%s)\n", $path, get_class($ex), $ex->getMessage());
        $filter = new DirectoryFilter($this->directories);
        $this->classes = [];
        foreach(get_declared_classes() as $className) {
            $class = new ReflectionClass($className);
            if ($filter->accept($class)) {
                $this->classes[$className] = $class;
    public function getIterator()
71727374757677787980818283
{ if ($this->classes === null) { $this->initialize(); } return new ArrayIterator($this->classes); } } function irstea_plantmul_include($filepath) { @include_once($filepath); }