Gibt es eine Reflexion / Selbstbeobachtung / Magie in PHP, mit der Sie die PHP-Datei finden können, in der eine bestimmte Klasse (oder Funktion) definiert wurde?
Mit anderen Worten, ich habe den Namen einer PHP-Klasse oder eines instanziierten Objekts. Ich möchte dies an etwas (Funktion, Reflection-Klasse usw.) übergeben, das den Dateisystempfad zurückgibt, in dem die Klasse definiert wurde.
/path/to/class/definition.php
Mir ist klar, dass ich verwenden könnte ( get_included_files())
um eine Liste aller bisher enthaltenen Dateien zu erhalten und sie dann alle manuell zu analysieren, aber das ist viel Dateisystemzugriff für einen einzigen Versuch.
Mir ist auch klar, dass ich zusätzlichen Code in unseren __autoload-Mechanismus schreiben könnte, der diese Informationen irgendwo zwischenspeichert. Das Ändern der vorhandenen __autoload ist jedoch in der Situation, an die ich denke, verboten.
Es wäre interessant, über Erweiterungen zu hören, die dies können, aber ich möchte letztendlich etwas, das auf einer "Standard" -Installation ausgeführt werden kann.
quelle
Antworten:
Versuchen
ReflectionClass
Beispiel:
Dies wird zurückgegeben,
false
wenn der Dateiname nicht gefunden werden kann, z. B. in nativen Klassen.quelle
Fügen Sie für ReflectionClass in einer Datei mit Namespace ein Präfix "\" hinzu, um es wie folgt global zu machen:
Andernfalls wird ein Fehler generiert, der als ReflectionClass in einem nicht definierten Namespace bezeichnet wird. Ich hatte kein Recht, einen Kommentar für die obige Antwort abzugeben, daher schreibe ich dies als ergänzende Antwort.
quelle
Wenn Sie einen Includes-Ordner hätten, könnten Sie einen Shell-Skriptbefehl ausführen, um "grep" für "class $ className" auszuführen, indem
$filename = ``grep -r "class $className" $includesFolder/*\
Sie Folgendes ausführen: und er würde zurückgeben, in welcher Datei er sich befindet. Abgesehen davon glaube ich nicht, dass es Magie gibt Funktion für PHP, um es für Sie zu tun.quelle