Pheasant\Migrate\Enumerator::_getClassFiles PHP Method

_getClassFiles() private method

Parses PHP and gets Namespaces and Classes
See also: http://stackoverflow.com/questions/928928/determining-what-classes-are-defined-in-a-php-class-file
private _getClassFiles ( $file )
    private function _getClassFiles($file)
    {
        $classes = array();
        $namespace = 0;
        $tokens = token_get_all(file_get_contents($file));
        $count = count($tokens);
        $dlm = false;
        for ($i = 2; $i < $count; $i++) {
            if (isset($tokens[$i - 2][1]) && ($tokens[$i - 2][1] == "phpnamespace" || $tokens[$i - 2][1] == "namespace") || $dlm && $tokens[$i - 1][0] == T_NS_SEPARATOR && $tokens[$i][0] == T_STRING) {
                if (!$dlm) {
                    $namespace = 0;
                }
                if (isset($tokens[$i][1])) {
                    $namespace = $namespace ? $namespace . "\\" . $tokens[$i][1] : $tokens[$i][1];
                    $dlm = true;
                }
            } elseif ($dlm && $tokens[$i][0] != T_NS_SEPARATOR && $tokens[$i][0] != T_STRING) {
                $dlm = false;
            }
            if (($tokens[$i - 2][0] == T_CLASS || isset($tokens[$i - 2][1]) && $tokens[$i - 2][1] == "phpclass") && $tokens[$i - 1][0] == T_WHITESPACE && $tokens[$i][0] == T_STRING) {
                $class_name = $tokens[$i][1];
                if (!isset($classes[$namespace])) {
                    $classes[$namespace] = array();
                }
                $classes[$namespace][] = $class_name;
            }
        }
        return $classes;
    }