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