Xpressengine\Plugin\PluginScanner::getClassName PHP Method

getClassName() protected method

주어진 파일에 포함된 클래스의 클래스명을 반환한다.
protected getClassName ( string $file, boolean $withNamespace = true ) : string
$file string 반환할 파일의 경로
$withNamespace boolean true일 경우 네임스페이스까지 포함된 클래스명을 반환한다.
return string 클래스명
    protected function getClassName($file, $withNamespace = true)
    {
        $tokens = token_get_all(file_get_contents($file));
        $namespace = '';
        $class = '';
        $namespaceGuess = $withNamespace ? T_NAMESPACE : false;
        $classGuess = T_CLASS;
        foreach ($tokens as $token) {
            if (!is_string($token)) {
                list($id, $text) = $token;
                if ($namespaceGuess) {
                    if ($namespaceGuess == T_NAMESPACE && $id == T_NAMESPACE) {
                        $namespaceGuess = T_STRING;
                    }
                    if ($namespaceGuess == T_STRING && $id == T_STRING) {
                        $namespace .= $text;
                        $namespaceGuess = T_NS_SEPARATOR;
                    }
                    if ($namespaceGuess == T_NS_SEPARATOR && $id == T_NS_SEPARATOR) {
                        $namespaceGuess = T_STRING;
                        $namespace .= $text;
                    }
                    // namespace ended
                    if ($namespaceGuess == T_NS_SEPARATOR && $id == T_WHITESPACE) {
                        $namespaceGuess = 0;
                    }
                }
                if ($classGuess) {
                    if ($classGuess == T_CLASS && $id == T_CLASS) {
                        $classGuess = T_STRING;
                    }
                    if ($classGuess == T_STRING && $id == T_STRING) {
                        $class .= $text;
                        break;
                    }
                }
            }
        }
        if ($class === '') {
            throw new InvaildPluginFileFormatException(['path' => $file]);
        }
        return $namespace . '\\' . $class;
    }