Vanilla\Addon::scanFile PHP 메소드

scanFile() 개인적인 정적인 메소드

Looks what classes and namespaces are defined in a file and returns them.
또한 보기: http://stackoverflow.com/a/11114724/1984219
private static scanFile ( string $path ) : array
$path string Path to file.
리턴 array Returns an empty array if no classes are found or an array with namespaces and classes found in the file.
    private static function scanFile($path)
    {
        $classes = $nsPos = $final = [];
        $foundNamespace = false;
        $ii = 0;
        if (!file_exists($path)) {
            return [];
        }
        $er = error_reporting();
        error_reporting(E_ALL ^ E_NOTICE);
        $php_code = file_get_contents($path);
        $tokens = token_get_all($php_code);
        //        $count = count($tokens);
        foreach ($tokens as $i => $token) {
            //} ($i = 0; $i < $count; $i++) {
            if (!$foundNamespace && $token[0] == T_NAMESPACE) {
                $nsPos[$ii]['start'] = $i;
                $foundNamespace = true;
            } elseif ($foundNamespace && ($token == ';' || $token == '{')) {
                $nsPos[$ii]['end'] = $i;
                $ii++;
                $foundNamespace = false;
            } elseif ($i - 2 >= 0 && $tokens[$i - 2][0] == T_CLASS && $tokens[$i - 1][0] == T_WHITESPACE && $token[0] == T_STRING) {
                if ($i - 4 >= 0 && $tokens[$i - 4][0] == T_ABSTRACT) {
                    $classes[$ii][] = array('name' => $token[1], 'type' => 'ABSTRACT CLASS');
                } else {
                    $classes[$ii][] = array('name' => $token[1], 'type' => 'CLASS');
                }
            } elseif ($i - 2 >= 0 && $tokens[$i - 2][0] == T_INTERFACE && $tokens[$i - 1][0] == T_WHITESPACE && $token[0] == T_STRING) {
                $classes[$ii][] = array('name' => $token[1], 'type' => 'INTERFACE');
            } elseif ($i - 2 >= 0 && $tokens[$i - 2][0] == T_TRAIT && $tokens[$i - 1][0] == T_WHITESPACE && $token[0] == T_STRING) {
                $classes[$ii][] = array('name' => $token[1], 'type' => 'TRAIT');
            }
        }
        error_reporting($er);
        if (empty($classes)) {
            return [];
        }
        if (!empty($nsPos)) {
            foreach ($nsPos as $k => $p) {
                $ns = '';
                for ($i = $p['start'] + 1; $i < $p['end']; $i++) {
                    $ns .= $tokens[$i][1];
                }
                $ns = trim($ns);
                $final[$k] = array('namespace' => $ns, 'classes' => $classes[$k + 1]);
            }
            $classes = $final;
        }
        return $classes;
    }