Tengo un pequeño problema con los espacios de nombres y las use
declaraciones.
Tengo tres archivos: ShapeInterface.php
, Shape.php
y Circle.php
.
Estoy tratando de hacer esto usando rutas relativas, así que puse esto en todas las clases:
namespace Shape;
En mi clase circular tengo lo siguiente:
namespace Shape;
//use Shape;
//use ShapeInterface;
include 'Shape.php';
include 'ShapeInterface.php';
class Circle extends Shape implements ShapeInterface{ ....
Si utilizo las include
declaraciones, no obtengo errores. Si pruebo las use
declaraciones obtengo:
Error fatal: la clase 'Shape \ Shape' no se encuentra en /Users/shawn/Documents/work/sites/workspace/shape/Circle.php en la línea 8
¿Podría alguien darme una pequeña guía sobre el tema?
php
namespaces
Shawn Northrop
fuente
fuente
Respuestas:
El
use
operador sirve para dar alias a nombres de clases, interfaces u otros espacios de nombres. La mayoría de lasuse
declaraciones se refieren a un espacio de nombres o una clase que le gustaría acortar:es equivalente a:
Si el
use
operador se utiliza con un nombre de clase o interfaz, tiene los siguientes usos:El
use
operador no debe confundirse con la carga automática . Una clase se carga automáticamente (eliminando la necesidad de hacerloinclude
) registrando un cargador automático (por ejemplo, conspl_autoload_register
). Es posible que desee leer PSR-4 para ver una implementación de autocargador adecuada.fuente
Si necesita ordenar su código en espacios de nombres, simplemente use la palabra clave
namespace
:file1.php
En file2.php
También puede utilizar
use
. Si en el archivo2 ponesuse foo\bar as mypath;
debe usar en
mypath
lugar debar
en cualquier lugar del archivo:El uso
use foo\bar;
es igual ause foo\bar as bar;
.fuente