Von Zeit zu Zeit nehmen wir Änderungen vor, die dies erfordern Überdenken Sie einige der Anpassungen und bringen Sie sie mit dem Kern in Einklang. Eine kürzlich erfolgte Änderung bestand darin, dass eine bestimmte Methode ein Array zurückgeben muss. Dies ist im Kern leicht anzugeben, z. B.:
Code: Select all
class MyLibrary {
public function myMethod(): array {
...
}
}
Das brachte mich dazu, darüber nachzudenken, nach diesen Methoden zu suchen, die das nicht tun. Ich habe nicht programmgesteuert ein Array zurückgegeben und bin auf dieses Juwel gestoßen.
https://github.com/nikic/php-ast
Es scheint dass ich damit die Quelle für eine Klasse lesen und mir dann die ansehen kann Syntaxbaum, um zu sehen, ob myMethod() einen Wert zurückgibt. Was ich besonders suche, sind Methoden, die einfach nichts zurückgeben.
Ich habe Folgendes als Ausgangspunkt versucht:
Code: Select all
use PhpParser\ParserFactory;
use PhpParser\{Node, NodeTraverser, NodeVisitorAbstract};
$code = file_get_contents('path/to/file.php');
$parser = (new ParserFactory())->createForNewestSupportedVersion();
$ast = $parser->parse($code);
$traverser = new NodeTraverser;
$traverser->addVisitor(new class extends NodeVisitorAbstract {
public function leaveNode(Node $node) {
dump($node);
readline();
echo "\n\n\n\n";
}
});
Code: Select all
stmts
Die Dokumentation zur PHP-Ast-Bibliothek ist nicht detailliert genug, um mir zu helfen, zu verstehen, wie das geht. Jede Anleitung ist willkommen.