Obtenir cette erreur lorsque je mets use Blog;
en haut.
Attention: l'instruction d'utilisation avec le nom non composé 'Blog' n'a aucun effet sur ...
Blog
est mon espace de noms dans lequel j'ai 3 classes: Article, Liste et Catégorie et quelques fonctions.
Si je change ma déclaration en use Blog\Article;
alors cela fonctionne ...
Ne puis-je pas simplement spécifier les espaces de noms que je souhaite utiliser? Dois-je fournir des cours?
Et si j'ai des fonctions dans ces espaces de noms? Quand je les appelle en dehors de l'espace de noms, je suis obligé de faire précéder \Blog\
le nom de chacun ...
php
namespaces
thelolcat
la source
la source
namespace
aprèsuse Blah;
.Réponses:
PHP
use
n'est pas le même que celui de C ++using namespace
; il vous permet de définir un alias , de ne pas "importer" un espace de noms et donc d'omettre désormais complètement le qualificatif d'espace de noms.Donc, vous pouvez faire:
... pour le raccourcir, mais vous ne pouvez pas vous en débarrasser entièrement.
Par conséquent,
use Blog
c'est inutile, mais je crois que vous pourriez écrire:Notez que vous devez utiliser un début
\
ici pour forcer l'analyseur à savoir qu'ilReallyLongNSName
est pleinement qualifié. Ce n'est pas vrai pourBlog\Article
, qui est évidemment déjà une chaîne d'espaces de noms:la source
use
chose est en fait inutile, pourrait aussi bien être un acronyme pour cela :)use
début de l'instruction, car ses arguments sont toujours considérés comme absolus (c'est-à-dire à partir de l'espace de noms global). 2)use Blog;
n'est pas forcément inutile: par exemple, à partir d'un fichier dont l'espace de nom est asBlog\Util\CLI
, il vous permettrait d'écrire à laBlog\Entry::method()
place de\Blog\Entry::method()
. Non pas que cela soit vraiment nécessaire, mais cela a un effet. Pour un exemple de cette utilisation, consultez le framework Nette.Puisque cette question apparaît comme le premier résultat sur Google pour cette erreur, je vais indiquer comment je l'ai corrigée.
En gros, si vous avez un framework, disons comme Yii2, vous serez habitué à devoir déclarer des classes comme:
Vous obtiendrez cette erreur
Use Yii
car cette classe n'a pas d'espace de noms.Comme cette classe n'a pas d'espace de noms, elle hérite automatiquement de la table de symboles globale et n'a donc pas besoin de choses comme celle-ci, supprimez-la simplement.
la source
use \Password
mais php n'aime pas ça quand vous essayez de faire ça sans alias, donc çause \Password as Password
marche même très bien.L'
use
instruction en PHP n'est en réalité qu'une commodité pour aliaser un long espace de noms en quelque chose qui peut être un peu plus facile à lire. Il n'inclut en fait aucun fichier ou ne fait rien d'autre, qui affecte votre développement, en plus de fournir une commodité. Depuis,Blog
n'est pas aliasé comme quoi que ce soit, vous ne gagnez aucune commodité. Je pourrais imaginer que tu pourrais faire quelque chose commeuse \Blog as B;
Et cela peut même fonctionner. ( On pourrait dire que vous perdez en fait la commodité ici en obscurcissant mais ce n'est pas le sujet de la question ) Parce que vous aliasez en fait l'
Blog
espace de noms vers autre chose. L'utilisationBlog\Article
fonctionne car, selon la documentation:Ainsi, votre extrait serait équivalent à:
la source
B
N'appelez jamais rien à moins que vous n'écriviez activement du code non maintenable ou que vous souhaitiez strictement causer des maux de tête aux autres.L'erreur "L'instruction use ... n'a aucun effet ..." apparaît également si vous essayez d'utiliser un trait avant une définition de classe.
la source
si vous ne voulez pas utiliser la syntaxe 'as' comme
définir un espace de noms pour le fichier
la source