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);




