28 de febrero de 2017

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

Deja una Respuesta