Diesen Fehler bekommen, wenn ich oben setze use Blog;
.
Warnung: Die use-Anweisung mit dem nicht zusammengesetzten Namen 'Blog' hat keine Auswirkung auf ...
Blog
ist mein Namespace, in dem ich 3 Klassen habe: Artikel, Liste und Kategorie und einige Funktionen.
Wenn ich meine Statistik auf ändere, use Blog\Article;
funktioniert es ...
Kann ich nicht einfach die Namespaces angeben, die ich verwenden möchte? Muss ich Unterricht anbieten?
Was ist, wenn ich Funktionen in diesen Namespaces habe? Wenn ich sie außerhalb des Namespace anrufe, muss ich \Blog\
jedem Namen einen Namen voranstellen ...
php
namespaces
thelolcat
quelle
quelle
namespace
danach deklariert habeuse Blah;
.Antworten:
PHPs
use
sind nicht dasselbe wie C ++using namespace
; Sie können einen Alias definieren , keinen Namespace "importieren" und daher das Namespace-Qualifikationsmerkmal von nun an ganz weglassen.Sie könnten also Folgendes tun:
... um es zu verkürzen, aber Sie können es nicht ganz loswerden.
Folglich
use Blog
ist nutzlos, aber ich glaube, Sie könnten schreiben:Beachten Sie, dass Sie hier eine Überschrift verwenden müssen
\
, um den Parser zu zwingen, zu wissen, dass erReallyLongNSName
voll qualifiziert ist. Dies gilt nicht fürBlog\Article
, was offensichtlich bereits eine Kette von Namespaces ist:quelle
use
Ding ist eigentlich nutzlos, könnte genauso gut ein Akronym dafür sein :)use
Anweisung kein führendes \ verwendet werden , da ihre Argumente immer als absolut angesehen werden (dh ausgehend vom globalen Namespace). 2)use Blog;
ist nicht unbedingt nutzlos: Zum BeispielBlog\Util\CLI
würde es Ihnen aus einer Datei mit dem Namensraum als ermöglichen,Blog\Entry::method()
statt zu schreiben\Blog\Entry::method()
. Nicht, dass dies wirklich notwendig wäre, aber es hat Auswirkungen. Ein Beispiel für diese Verwendung finden Sie im Nette-Framework.Da diese Frage als erstes Ergebnis bei Google für diesen Fehler angezeigt wird, werde ich angeben, wie ich sie behoben habe.
Wenn Sie ein Framework wie Yii2 haben, sind Sie es gewohnt, Klassen wie folgt deklarieren zu müssen:
Sie erhalten diesen Fehler,
Use Yii
da diese Klasse keinen Namespace hat.Da diese Klasse keinen Namespace hat, erbt sie automatisch die globale Symboltabelle und benötigt daher keine derartigen Definitionen. Entfernen Sie sie einfach.
quelle
use \Password
aber PHP mag es nicht, wenn Sie versuchen, dies ohne Alias zu tun, alsouse \Password as Password
funktioniert es sogar einwandfrei.Die
use
Anweisung in PHP ist wirklich nur eine Annehmlichkeit, um einen langen Namespace in etwas zu aliasen, das möglicherweise etwas einfacher zu lesen ist. Es enthält keine Dateien oder andere Aktionen, die sich auf Ihre Entwicklung auswirken, außer auf Komfort. DaBlog
ist nicht alias als irgendetwas, das Sie nicht von der Bequemlichkeit gewinnen. Ich könnte mir vorstellen, dass Sie so etwas tun könntenuse \Blog as B;
Und das kann sogar funktionieren. ( Es könnte argumentiert werden, dass Sie hier tatsächlich die Bequemlichkeit verlieren, indem Sie verdecken, aber darum geht es bei der Frage nicht. ) Weil Sie den
Blog
Namespace tatsächlich auf etwas anderes aliasen. VerwendenBlog\Article
funktioniert, weil laut den Dokumenten:Ihr Snippet wäre also gleichbedeutend mit:
quelle
B
Sie niemals etwas an, es sei denn, Sie schreiben aktiv nicht wartbaren Code oder möchten unbedingt anderen Kopfschmerzen bereiten.Der Fehler "Die use-Anweisung ... hat keine Auswirkung ..." wird auch angezeigt, wenn Sie versuchen, ein Merkmal vor einer Klassendefinition zu verwenden.
quelle
wenn Sie nicht 'als' Syntax wie verwenden möchten
Definieren Sie einen Namespace für die Datei
quelle