PHP 5.5 hat als neues Feature eine neue Methode zum Abrufen des Klassennamens über die Syntax ::class
:
Das funktioniert perfekt, okay? Was ich und einige andere Freunde wissen wollten ist, warum diese Syntax auch einen Klassennamen zurückgibt, wenn sie neben einer nicht deklarierten Klasse verwendet wird. Zum Beispiel:
%Vor%In einigen anderen Fällen wird ein Fehler ausgelöst, aber nicht hier. Wer weiß, wenn möglich mit konkreter Basis, warum passiert das?
Hat es etwas zu Late Static Bindings oder ist es nur eine (vorübergehende) Einschränkung / Bug dieser brandneuen Funktion?
Endlich eine offizielle Antwort ... relativ gesehen. Es wurde mir von jemandem präsentiert, der von [email protected] in einem bu-Bericht
PHP muss die Definition einer Klasse nicht kennen, um ihren voll qualifizierten Namen zu erhalten. Alle erforderlichen Informationen sind in der Kompilierzeit verfügbar, so dass sie nicht geladen werden müssen.
Namespaces wie die use werden in der Kompilierungszeit aufgelöst, d. h. wenn die Datei vor ihrer Ausführung kompiliert wird. Deshalb gibt es strenge Anforderungen, um sie zu verwenden.
Aufgrund all dieser Anforderungen kann PHP, wenn es auf einen Klassennamen stößt, sofort seinen voll qualifizierten Namen kennen. Wenn man es als Dateisystem betrachtet, wäre der Namespace ein Verzeichnis für relative Speicherorte, und die Verwendung wäre Symlinks .
Der Klassenname ist entweder absolut ("\ Testing \ Test") oder relativ ("Test"), und wenn es relativ ist, könnte es ein normaler Name sein. [mehr Kontext erforderlich]
%Vor%Oder ein Alias :
%Vor% Ohne all das würde
::class
ist nur ein neues Werkzeug, um Informationen zu enthüllen, die PHP schon immer gekannt hat.
Diese "erweiterte Antwort" entspricht ziemlich genau dem, was ich als Fehlerbericht erhalten habe. Der Grund für so viel scheinbare Kopie & amp; Paste ist, weil ich ursprünglich diese Antwort für eine andere Stack-Überlauf-Community erstellt habe
Sie können get_class
function verwenden, um den Klassennamen mit dem Namespace abzurufen. Es wird gut sein, es zu benutzen.
Hier ist der Code, den Sie diesen Code ausprobieren können: