Wie überprüft man, ob eine Klasse in einem Namespace existiert?
Habe ich dieses:
use XXX\Driver\Driver;
...
var_dump(class_exists('Driver')); //false
$driver = new Driver(); //prints 123123123 since I put an echo in the constructor of this class
exit;
Gut... dieses Verhalten ist irrational (das erstellen von Objekten der Klassen, die laut PHP nicht vorhanden sind). Gibt es eine Möglichkeit zu überprüfen, ob eine Klasse existiert unter den gegebenen namespace?
Kommentar zu dem Problem
php.net/class_exists schauen Sie sich die Kommentare wie namespaces sind gegeben
InformationsquelleAutor der Frage Taruo Gene | 2014-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um zu überprüfen Klasse müssen Sie es mit namespace, vollständiger Pfad:
und
d.h. Sie muss geben Sie den vollständigen Pfad zur Klasse. Sie definierten Sie in Ihrem Namensraum und nicht im globalen Kontext.
Jedoch, wenn Sie importieren Sie die Klasse innerhalb des Namensraums, wie Sie in Ihrem Beispiel, Sie können auf es über importierte Namen und ohne namespace, aber das können Sie nicht tun, dass in dynamischen Konstruktionen und insbesondere in-line-strings, die forms-Klasse name. Zum Beispiel, alle folgenden fehl:
und so weiter. Das Problem liegt in der mechanik der Arbeit für importierte Aliase. Beim arbeiten mit solchen Konstruktionen, Sie müssen geben Sie den vollständigen Pfad:
InformationsquelleAutor der Antwort Alma Do
Das Problem (wie erwähnt, in
class_exists()
Handbuch Seite Notizen) ist, dass Aliase nicht berücksichtigt, wenn der name einer Klasse ist gegeben als string. Dies wirkt sich auch auf andere Funktionen, die ein Klasse name, wieis_a()
. Folglich, wenn Sie den Klassennamen in einer Zeichenkette, müssen Sie den vollständigen namespace (z.B.'\XXX\Driver\Driver'
,'XXX\\Driver\\Driver'
).PHP 5.5 eingeführt, die
class
Konstante für genau diesen Zweck:InformationsquelleAutor der Antwort outis
Admins
ist der Ordner, in dem alle Klassen vorhanden sindInformationsquelleAutor der Antwort symi khan