Was ist der Hauptunterschied zwischen diesen beiden Zeilen?:
%Vor%& amp;
%Vor% Als ich die erste Zeile benutzt habe, habe ich einen Fehler bekommen: "Fatal error: Class '\Foo\Bar\ArrayObject' not found..."
und ich bin mir nicht sicher, warum ich diesen Fehler bekommen habe? Die zweite Zeile schien das Problem behoben zu haben.
Wenn Sie Folgendes verwenden:
%Vor% bedeutet, dass ArrayObject im aktuellen Namespace definiert ist. Sie können diese Syntax verwenden, wenn Sie sich im globalen Namespace befinden (kein Namespace im aktuellen Bereich definiert) oder wenn ArrayObject im selben Namespace wie der aktuelle Bereich definiert ist (Beispiel Foo\Bar
).
Und wenn Sie verwenden:
%Vor%bedeutet, dass ArrayObject im globalen Namespace definiert ist.
In Ihrem Beispiel haben Sie wahrscheinlich einen Code wie diesen:
%Vor% Es wird nicht funktionieren, weil Sie ArrayObject
in Foo\Bar
namespace nicht definiert haben.
Der obige Code ist der gleiche wie:
%Vor% Und wenn ArrayObject
im globalen Namespace definiert ist (wie in Ihrem Fall wahrscheinlich), müssen Sie Code verwenden:
, um zu betonen, dass ArrayObject nicht in Foo\Bar
namespace definiert ist.
Noch eine Sache - wenn Sie ArrayObject an vielen Stellen in Ihrem aktuellen Namespace verwenden, ist es möglicherweise nicht sehr praktisch, jedes Mal einen führenden Backslash hinzuzufügen. Aus diesem Grund können Sie den Namespace importieren, damit Sie eine einfachere Syntax verwenden können:
%Vor% Wie Sie sehen, wurde use ArrayObject;
vor dem Erstellen des Objekts zum Importieren von ArrayObject aus dem globalen Namespace hinzugefügt. Wenn Sie use
verwenden, müssen Sie keinen führenden Backslash hinzufügen (und sollten dies auch nicht tun), aber es funktioniert genauso wie use \ArrayObject;
. Daher ist der obige Code logisch äquivalent zu:
Allerdings sollte wie gesagt kein umgekehrter Schrägstrich beim Import von Namespaces verwendet werden. Zitat PHP Handbuch dafür:
Beachten Sie, dass für Namespaced-Namen (vollständig qualifizierte Namespacenamen, die Namespace-Trennzeichen wie Foo \ Bar im Gegensatz zu globalen Namen wie FooBar enthalten) der führende Backslash unnötig und nicht empfehlenswert ist, da Importnamen sein müssen vollständig qualifiziert und werden nicht relativ zum aktuellen Namespace verarbeitet.
Tags und Links php namespaces scope oop