Mon extrait aussi. Peut analyser des fichiers avec plusieurs classes, interfaces, tableaux et espaces de noms. Renvoie un tableau avec des classes+types (classe, interface, abstraite) divisés par des espaces de noms.
= 0 && $tokens[$i - 2][0] == T_CLASS && $tokens[$i - 1][0] == T_WHITESPACE && $tokens[$i][0] == T_STRING)
{
if($i-4 >=0 && $tokens[$i - 4][0] == T_ABSTRACT)
{
$classes[$ii][] = array('name' => $tokens[$i][1], 'type' => 'CLASSE ABSTRAITE');
}
else
{
$classes[$ii][] = array('name' => $tokens[$i][1], 'type' => 'CLASSE');
}
}
elseif ($i-2 >= 0 && $tokens[$i - 2][0] == T_INTERFACE && $tokens[$i - 1][0] == T_WHITESPACE && $tokens[$i][0] == T_STRING)
{
$classes[$ii][] = array('name' => $tokens[$i][1], 'type' => 'INTERFACE');
}
}
error_reporting($er);
if (empty($classes)) return NULL;
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;
}
Produit quelque chose comme ceci...
array
'namespace' => string 'test\foo' (length=8)
'classes' =>
array
0 =>
array
'name' => string 'bar' (length=3)
'type' => string 'CLASSE' (length=6)
1 =>
array
'name' => string 'baz' (length=3)
'type' => string 'INTERFACE' (length=9)
array
'namespace' => string 'this\is\a\really\big\namespace\for\testing\dont\you\think' (length=57)
'classes' =>
array
0 =>
array
'name' => string 'yes_it_is' (length=9)
'type' => string 'CLASSE' (length=6)
1 =>
array
'name' => string 'damn_too_big' (length=12)
'type' => string 'CLASSE ABSTRAITE' (length=15)
2 =>
array
'name' => string 'fogo' (length=6)
'type' => string 'INTERFACE' (length=9)
Peut aider quelqu'un !
0 votes
Quel est le but d'obtenir le nom de classe de chaque fichier? La meilleure solution devrait être adaptée à votre espace de problème. Tel quel, j'ai l'impression qu'il y a probablement une meilleure solution en fonction de ce que vous cherchez à faire.
6 votes
Cela fait un moment, mais toujours : vous pourriez appeler
get_declared_classes
, le sauvegarder, inclure le fichier de classe, et rappelerget_declared_classes
à nouveau. La différence se trouve dans ce fichier. Simple.