Stellen Sie sicher, dass alle Instanzen einer bestimmten Methode einen Wert zurückgebenPhp

PHP-Programmierer chatten hier
Guest
 Stellen Sie sicher, dass alle Instanzen einer bestimmten Methode einen Wert zurückgeben

Post by Guest »

Wir haben eine mandantenfähige PHP-Anwendung. Diese Anwendung stellt eine Reihe von Kernfunktionen bereit, und dann können wir auf Mandantenbasis Webanwendungen erstellen und dabei den Kern nutzen und erweitern.
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 {
...
}
}
Allerdings müssten wir dann sicherstellen, dass alle Klassen, die die Bibliothek erweitern, auch eine passende Methodensignatur haben. Wir werden dies tun, aber dann müssen wir auch sicherstellen, dass alle diese Methoden tatsächlich ein Array zurückgeben. Derzeit gibt es etwa 250 Mandanten, die überprüft werden müssen, und es können mehrere Dateien vorhanden sein, die die Bibliothek wie im obigen Beispiel erweitern.
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";
}
});
Und das ermöglicht mir, den AST zu durchlaufen und die Knoten zu sehen, und ich kann PhpParser\Node\Stmt\ClassMethod-Objekte und die Anweisungen sehen (

Code: Select all

stmts
) darin enthalten, aber ich kann nicht ganz herausfinden, wie ich überprüfen kann, ob in den Anweisungen ein PhpParser\Node\Stmt\Return vorhanden ist oder nicht.
Die Dokumentation zur PHP-Ast-Bibliothek ist nicht detailliert genug, um mir zu helfen, zu verstehen, wie das geht. Jede Anleitung ist willkommen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post