Recibiendo este error cuando pongo use Blog;
en la parte superior.
Advertencia: La declaración de uso con el nombre no compuesto 'Blog' no tiene efecto en ...
Blog
es mi espacio de nombres en el que tengo 3 clases: Artículo, Lista y Categoría y algunas funciones.
Si cambio mi statememnt a use Blog\Article;
entonces funciona ...
¿No puedo especificar los espacios de nombres que quiero usar? ¿Necesito dar clases?
¿Qué pasa si tengo funciones dentro de esos espacios de nombres? Cuando los llamo fuera del espacio de nombres, me veo obligado a anteponer \Blog\
el nombre de cada uno ...
php
namespaces
thelolcat
fuente
fuente
namespace
despuésuse Blah;
.Respuestas:
PHP
use
no es lo mismo que C ++using namespace
; le permite definir un alias , no "importar" un espacio de nombres y por lo tanto omitir el calificador del espacio de nombres por completo.Entonces, podrías hacer:
... para acortarlo, pero no puede deshacerse de él por completo.
En consecuencia,
use Blog
es inútil, pero creo que podrías escribir:Tenga en cuenta que debe utilizar un encabezado
\
aquí para obligar al analizador a saber queReallyLongNSName
está totalmente calificado. Esto no es cierto paraBlog\Article
, que obviamente ya es una cadena de espacios de nombres:fuente
use
cosa es realmente inútil, bien podría ser un acrónimo para eso :)use
principio de la declaración, porque sus argumentos siempre se ven como absolutos (es decir, comenzando desde el espacio de nombres global). 2)use Blog;
no es necesariamente inútil: por ejemplo, a partir de un archivo con espacio de nombres comoBlog\Util\CLI
, le permitiría escribir enBlog\Entry::method()
lugar de\Blog\Entry::method()
. No es que esto sea realmente necesario, pero tiene un efecto. Para ver un ejemplo de este uso, consulte el marco de Nette.Dado que esta pregunta aparece como el primer resultado en Google para este error, diré cómo lo solucioné.
Básicamente, si tiene un marco, digamos como Yii2, estará acostumbrado a tener que declarar clases como:
Obtendrá este error
Use Yii
ya que esta clase no tiene espacio de nombres.Dado que esta clase no tiene espacio de nombres, hereda automáticamente la tabla de símbolos global y, por lo tanto, no necesita definir cosas como esta, simplemente elimínela.
fuente
use \Password
pero a php no le gusta cuando intentas hacerlo sin un alias, así que inclusouse \Password as Password
funciona bien.La
use
declaración en PHP es realmente una conveniencia para alias de un espacio de nombres largo en algo que puede ser un poco más fácil de leer. En realidad, no incluye ningún archivo ni hace nada más que afecte su desarrollo, además de brindar comodidad. Dado que,Blog
no tiene un alias como algo, no está obteniendo ninguna ventaja. Podría imaginar que podrías hacer algo comouse \Blog as B;
Y eso incluso puede funcionar. ( Se podría argumentar que en realidad pierde la conveniencia aquí al oscurecer, pero de eso no se trata la pregunta ) Porque en realidad está alias del
Blog
espacio de nombres con otra cosa. UsarBlog\Article
funciona porque, según los documentos:Entonces su fragmento sería equivalente a:
fuente
B
menos que estés escribiendo un código que no se pueda mantener o que desees estrictamente causar dolores de cabeza a otros.El error "La declaración de uso ... no tiene efecto ..." también aparece si intenta usar un rasgo antes de una definición de clase.
fuente
si no quiere usar la sintaxis 'as' como
definir un espacio de nombres para el archivo
fuente