php - tablas - consultas sql con eloquent
Espacios de nombres PHP y "uso" (2)
Estoy teniendo un pequeño problema con los espacios de nombres y las declaraciones de use
.
Tengo tres archivos: ShapeInterface.php
, Shape.php
y Shape.php
.
Estoy tratando de hacer esto usando rutas relativas, así que puse esto en todas las clases:
namespace Shape;
En mi clase de círculo tengo lo siguiente:
namespace Shape;
//use Shape;
//use ShapeInterface;
include ''Shape.php'';
include ''ShapeInterface.php'';
class Circle extends Shape implements ShapeInterface{ ....
Si utilizo las declaraciones include
, no obtengo ningún error. Si pruebo las declaraciones de use
, obtengo:
Error fatal: clase ''Shape / Shape'' no encontrada en /Users/shawn/Documents/work/sites/workspace/shape/Circle.php en la línea 8
¿Podría alguien darme un poco de orientación sobre el tema?
El operador de use
es para dar alias a nombres de clases, interfaces u otros espacios de nombres. La mayoría de las declaraciones de use
refieren a un espacio de nombres o clase que le gustaría acortar:
use My/Full/Namespace;
es equivalente a:
use My/Full/Namespace as Namespace;
// Namespace/Foo is now shorthand for My/Full/Namespace/Foo
Si el operador de use
se usa con una clase o nombre de interfaz, tiene los siguientes usos:
// after this, "new DifferentName();" would instantiate a My/Full/Classname
use My/Full/Classname as DifferentName;
// global class - making "new ArrayObject()" and "new /ArrayObject()" equivalent
use ArrayObject;
El operador de use
no debe confundirse con la autoloading . Una clase se carga automáticamente (anulando la necesidad de include
) registrando un autocargador (por ejemplo, con spl_autoload_register
). Es posible que desee leer el PSR-4 para ver una implementación adecuada del autocargador.
La forma más sencilla de expresarlo
Si necesita ordenar su código en espacios de nombres, simplemente use el namespace
palabra clave.
En el namespace foo/bar;
file1.php namespace foo/bar;
En file2.php $obj = new foo/bar/myObj();
Todavía un poco más con esta historia: la palabra clave use
.
Si dices en el archivo2 use foo/bar as mypath
esto significa que necesitas usar mypath
lugar de foo/bar
en cualquier parte del archivo. ''
$obj = new mypath/myObj();
Si hubiera dicho use foo/bar
, es igual a use foo/bar as bar