private static function ClassMapGenerator::findClasses in Zircon Profile 8.0
Same name and namespace in other branches
- 8 vendor/symfony/class-loader/ClassMapGenerator.php \Symfony\Component\ClassLoader\ClassMapGenerator::findClasses()
Extract the classes in the given file.
Parameters
string $path The file to check:
Return value
array The found classes
1 call to ClassMapGenerator::findClasses()
- ClassMapGenerator::createMap in vendor/
symfony/ class-loader/ ClassMapGenerator.php - Iterate over all files in the given directory searching for classes.
File
- vendor/
symfony/ class-loader/ ClassMapGenerator.php, line 90
Class
- ClassMapGenerator
- ClassMapGenerator.
Namespace
Symfony\Component\ClassLoaderCode
private static function findClasses($path) {
$contents = file_get_contents($path);
$tokens = token_get_all($contents);
$classes = array();
$namespace = '';
for ($i = 0, $max = count($tokens); $i < $max; ++$i) {
$token = $tokens[$i];
if (is_string($token)) {
continue;
}
$class = '';
switch ($token[0]) {
case T_NAMESPACE:
$namespace = '';
// If there is a namespace, extract it
while (($t = $tokens[++$i]) && is_array($t)) {
if (in_array($t[0], array(
T_STRING,
T_NS_SEPARATOR,
))) {
$namespace .= $t[1];
}
}
$namespace .= '\\';
break;
case T_CLASS:
case T_INTERFACE:
case SYMFONY_TRAIT:
// Skip usage of ::class constant
$isClassConstant = false;
for ($j = $i - 1; $j > 0; --$j) {
if (is_string($tokens[$j])) {
break;
}
if (T_DOUBLE_COLON === $tokens[$j][0]) {
$isClassConstant = true;
break;
}
elseif (!in_array($tokens[$j][0], array(
T_WHITESPACE,
T_DOC_COMMENT,
T_COMMENT,
))) {
break;
}
}
if ($isClassConstant) {
continue;
}
// Find the classname
while (($t = $tokens[++$i]) && is_array($t)) {
if (T_STRING === $t[0]) {
$class .= $t[1];
}
elseif ($class !== '' && T_WHITESPACE == $t[0]) {
break;
}
}
$classes[] = ltrim($namespace . $class, '\\');
break;
default:
break;
}
}
return $classes;
}