getFileName(); $src = file_get_contents($f); // 去掉注释与字符串,只保留可执行代码里的类引用。 $code = ''; foreach (token_get_all($src) as $tok) { if (is_array($tok)) { if (in_array($tok[0], [T_COMMENT, T_DOC_COMMENT, T_CONSTANT_ENCAPSED_STRING, T_ENCAPSED_AND_WHITESPACE], true)) { continue; } $code .= $tok[1]; } else { $code .= $tok; } } $ns = ''; if (preg_match('/^namespace\s+([^;]+);/m', $src, $mm)) { $ns = trim($mm[1], '\\'); } $imports = []; preg_match_all('/^use\s+([A-Za-z0-9_\\\\]+)(?:\s+as\s+([A-Za-z0-9_]+))?;/m', $code, $um, PREG_SET_ORDER); foreach ($um as $u) { $full = $u[1]; $short = (isset($u[2]) && $u[2] !== '') ? $u[2] : substr($full, strrpos($full, '\\') + 1); $imports[$short] = true; } // 只匹配未加前导反斜杠的短类名;`\Foo\Bar::baz()` 是全限定引用,不受命名空间影响。 preg_match_all('/(?