Uso de Namespace con PHP

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 controllers\usuarios

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 “controllers\usuarios.php”;

use controllers\usuarios\Usuarios;

echo  :: login(“Miguel”,123456);

Se utiliza la palabra reservada ‘use’ el espacio de nombres (controllers\usuarios) 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 controllers\usuarios\Usuarios :: login(“Miguel”,123456);

Uso de funciones con los namespace

namespace controllers\usuarios

public function bienvenida($usuario){

                return “Bienvenido al sistema ” . $usuario;

 }


use function controllers\usuarios\ bienvenida;

echo bienvenida(“Miguel”);

 

Invocar varios namespace

use controllers\usuarios,
    controllers\alumnos,
    controllers\calificaciones;

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 controllers\usuarios,

    models\usuarios;

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 models\usuarios\Usuarios::login(“Miguel”,12345);

echo controllers\usuarios\Usuarios::login(“Heydi”, 67890);

Si las funciones NO fueran estáticas, quedaría algo como:

$usuarioM = new models\usuarios\Usuarios();

$usuarioC = new controllers\usuarios\Usuarios();

$usuarioM->login(“Miguel”, 12345);

$usuarioC->login(“Heydi”, 67890);

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

10 + diecinueve =