usar tablas registros personalizadas multitabla funciona contar consultas consultar consulta con como anidadas php namespaces use

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