Obtenir cette erreur quand je mets use Blog;
au sommet.
Avertissement: L'instruction d'utilisation avec le nom non composé 'Blog' n'a aucun effet dans ...
Blog
est mon espace de noms dans lequel j'ai 3 classes: Article, List et Category et quelques fonctions.
Si je change mon statut en use Blog\Article;
alors ça marche ...
Puis-je simplement spécifier les espaces de noms que je veux utiliser? Dois-je donner des cours?
Et si j'ai des fonctions dans cet espace de noms? Lorsque je les appelle en dehors de l'espace de noms, je suis obligé de préfixer \Blog\
au nom de chacun ...
use
de PHP n'est pas identique à using namespace
De C++; il vous permet de définir un alias, de ne pas "importer" un espace de noms et donc d'omettre complètement le qualificatif d'espace de noms.
Donc, vous pourriez faire:
use Blog\Article as BA;
... pour le raccourcir, mais vous ne pouvez pas vous en débarrasser complètement.
Par conséquent, use Blog
Est inutile, mais je crois que vous pourriez écrire:
use \ReallyLongNSName as RLNN;
Notez que vous devez utiliser un \
Initial ici pour forcer l’analyseur à savoir que ReallyLongNSName
est pleinement qualifié. Ce n'est pas vrai pour Blog\Article
, Qui est évidemment déjà une chaîne d'espaces de noms:
Notez que pour les noms d'espacement de noms (noms d'espaces de noms qualifiés complets contenant un séparateur d'espace de noms, tels que
Foo\Bar
contrairement aux noms globaux qui ne le sont pas, tels queFooBar
), , la barre oblique inversée n'est pas nécessaire et non recommandé, car les noms d'importation doivent être entièrement qualifiés et ne sont pas traités par rapport à l'espace de noms actuel.
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:
use Yii;
use yii\db\WhatEver;
class AwesomeNewClass extends WhatEver
{
}
Vous obtiendrez cette erreur sur Use Yii
puisque cette classe n’a pas d’espace de noms.
Comme cette classe n'a pas d'espace de nom, elle hérite automatiquement de la table des symboles globale et n'a donc pas besoin d'éléments tels que cette définition, il suffit de la supprimer.
L'énoncé use
en PHP n'est en réalité qu'un moyen pratique d'aliaser un espace de noms long en quelque chose de plus lisible. En fait, cela n'inclut aucun fichier ni aucune autre chose qui affecte votre développement, outre la commodité. Depuis, Blog
n'est pas aliasé comme quoi que ce soit pour lequel vous ne tirez aucun avantage. J'imagine que vous pourriez faire quelque chose comme
use \Blog as B;
Et cela peut même fonctionner. ( On pourrait faire valoir que vous perdez réellement la commodité ici en obscurcissant mais ce n'est pas de quoi la question porte ) Parce que vous aliasez en fait le Blog
espace de noms à quelque chose d'autre. En utilisant Blog\Article
fonctionne parce que, selon la documentation:
// this is the same as use My\Full\NSname as NSname
use My\Full\NSname;
Donc, votre extrait serait équivalent à:
use Blog\Article as Article;
si vous ne voulez pas utiliser la syntaxe 'as' comme
use \Blog as B;
définir un espace de noms pour le fichier
namespace anyname;
use Blog
L'erreur "L'instruction use ... n'a pas d'effet ..." apparaît également si vous essayez d'utiliser un trait avant une définition de classe.
use My_trait; // should not be here
class My_class{
// use My_trait; should be here instead
}