Los Namespace o ‘espacios de nombre’ son contenedores, por así decirlo, que permiten agrupar código para después utilizarlo en otros script; es muy usando en la arquitectura MVC (modelo-vista-controlador) para poder diferenciar los nombres de métodos y funciones.
Ejemplo:
Tengo un archivo en el controlador llamado usuarios.php, dentro de ella hay un método llamado ‘login’ y ten un archivo en la vista modelo llamado usuarios.php y dentro de ella un método llamado ‘login’.
El método login del controlador realiza una operación diferente método login del modelo.
Puesto que los nombres de archivos son iguales y los métodos tienen el mismo nombre, esto puede generar problemas y confusiones a la hora de programar; los namespace solucionan esto.
Declarar namespace
namespace controllersusuarios class Usuarios{ public static function login($user, $pass){ return “Usuario: “ . $user . “logueado correctamente”; } }
Dentro de la carpeta ‘controllers’ tengo el archivo usuarios.php y dentro de él la clase ‘usuarios’ con el método ‘login’.
Uso de los namespace
requiere_once “controllersusuarios.php”; use controllersusuariosUsuarios; echo :: login(“Miguel”,123456);
Se utiliza la palabra reservada ‘use’ el espacio de nombres (controllersusuarios) y el nombre de la clase como si un archivo fuera (Usuarios).
Debido a que la función ‘login’ es estática, no hace falta instanciar el objeto; incluso puede llamarse directamente
echo controllersusuariosUsuarios :: login(“Miguel”,123456);
Uso de funciones con los namespace
namespace controllersusuarios public function bienvenida($usuario){ return “Bienvenido al sistema ” . $usuario; } use function controllersusuarios bienvenida; echo bienvenida(“Miguel”);
Invocar varios namespace
use controllersusuarios, controllersalumnos, controllerscalificaciones;
Usar “use” por cada nombre de espacio o solo basta separarlos con una coma (,).
Regresando al ejemplo inicial, es posible declarara un espacio de nombre para cada elemento:
use controllersusuarios, modelsusuarios;
De esta manera identifico cada archivo y por ende, cada función de cada archivo aunque se llamen igual;
Al usuarlo seria algo como:
echo modelsusuariosUsuarios::login(“Miguel”,12345); echo controllersusuariosUsuarios::login(“Heydi”, 67890);
Si las funciones NO fueran estáticas, quedaría algo como:
$usuarioM = new modelsusuariosUsuarios(); $usuarioC = new controllersusuariosUsuarios(); $usuarioM->login(“Miguel”, 12345); $usuarioC->login(“Heydi”, 67890);