Estoy tratando de usar espacios de nombres en php con algunas clases e interfaces.Espacios de nombres PHP e interfaces
Parece que debo poner una declaración de uso tanto para la interfaz como para el tipo concreto que se utiliza. ¿Esto es una especie de derrotar el propósito de usar interfaces con seguridad?
así que pude haber
//Interface
namespace App\MyNamesapce;
interface MyInterface
{}
//Concrete Implementation
namespace App\MyNamesapce;
class MyConcreteClass implements MyInterface
{}
//Client
namespace App;
use App\MyNamespace\MyInterface // i cannot do this!!!!
use App\MyNamespace\MyConcreteClass // i must do this!
class MyClient
{}
¿No es todo el punto de interfaces de modo que los tipos concretos son intercambiables - esto va en contra que a buen seguro. A menos que no esté haciendo algo correctamente
Entonces, en lugar de usar 'usar espacio de nombres', ¿usar la ruta completa a la clase? –
No necesariamente, también puede importar la clase en el espacio de nombre actual. Eso es solo una cuestión de estilo. – Niko
Sí, estaba pensando que, como estoy utilizando una interfaz, quiero que el espacio de nombres sea las interfaces, pero en realidad, al reflexionar eso no tiene ningún sentido. Una mejor opción sería usar inyección de dependencia, supongo, y nunca instanciar una clase que pueda ser intercambiable. –