Determining what classes are defined in a PHP class file

后端 未结 8 1351
-上瘾入骨i
-上瘾入骨i 2020-11-27 14:56

Given that each PHP file in our project contains a single class definition, how can I determine what class or classes are defined within the file?

I know I could jus

8条回答
  •  时光取名叫无心
    2020-11-27 15:00

    I needed parse classes from file with namespaces, so I modified code. If somebody need too, here is it:

    public function getPhpClasses($phpcode) {
        $classes = array();
    
        $namespace = 0;  
        $tokens = token_get_all($phpcode); 
        $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;
    }
    

提交回复
热议问题