Cómo organizar los fuentes PHP con espacios de nombres

2022-07-19 - Categorías: General / PHP

Este es un codekata o howto para organizar los códigos fuentes usando espacios de nombres. Esta técnica consiste en organizar las clases de los ficheros en espacios, para que no haya colisiones entre nombres de clases iguales, y para que todo tenga una estructura más mantenible.

Este howto también se puede combinar con la autocarga de clases, lo que se llama PSR-4 de PHP.

Al grano, algo de código

Es sencillo, simplemente hay que usar la palabra reservada namespace para definir cada espacio en cada fichero. Luego en los otros ficheros se utiliza la palabra use para elegir cada espacio.

Por ejemplo un fichero namespace1/Something.php:

<?php

namespace namespace1;

class Something
{
    public function doSomething()
    {
        echo 'Something..'.PHP_EOL;
    }
}

Otro fichero namespace2/Something.php:

<?php

namespace namespace2;

class Something
{
    public function doSomethingElse()
    {
        echo 'Something else..'.PHP_EOL;
    }
}

Y un fichero principal que los usa:

<?php

include 'namespace1/Something.php';
include 'namespace2/Something.php';

use namespace1\Something as Something1;
use namespace2\Something as Something2;

$something = new Something1();
$something->doSomething();

$somethingElse = new Something2();
$somethingElse->doSomethingElse();

Este es un caso de uso en el que colisionan dos nombre de clase iguales (Something) y cómo se podría resolver. También se podría haber resuelto cambiando la inicialización de cada objeto así:

<?php

include 'namespace1/Something.php';
include 'namespace2/Something.php';

$something = new namespace1\Something();
$something->doSomething();

$somethingElse = new namespace2\Something();
$somethingElse->doSomethingElse();

Me remito a la documentación oficial para más información:
https://www.php.net/manual/es/language.namespaces.php

Deja una respuesta

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

 

© 2022 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.