A medida que nuestro programa va creciendo es muy probable que queramos organizarlo, es decir, crear carpetas y subcarpetas e ir dividiendo nuestros archivos en diferentes documentos. Para ello sirven los namespaces.
Vamos a crear un ejm en el cual hay creadas dos carpetas, Carpeta1 y Carpeta2. Dentro de Carpeta1 tenemos el archivo PHP Humano.php, que tiene la siguiente sintaxis:
Humano.php
<?php
namespace Carpeta1;
class Humano {
public function saludar(){
echo "Hola desde la clase Humano dentro de la carpeta carpeta1";
}
}
Y dentro de Carpeta2 tenemos el archivo con el mismo nombre, Humano.php, veamos su sintaxis
Humano.php
<?php
namespace Carpeta2;
class Humano {
public function saludar(){
echo "Hola desde la clase Humano dentro de la carpeta carpeta2";
}
}
Paralelo a las carpetas Carpeta1 y Carpeta2 tenemos un archivo index.php con la siguiente sintaxis.
index.php
<?php
require_once('Carpeta1/Humano.php');
require_once('Carpeta2/Humano.php');
$humano1 = new Carpeta1\Humano;
$humano1->saludar();
echo "<br />";
$humano2 = new Carpeta2\Humano;
$humano2->saludar();
Como vemos, para instanciar a las clases del mismo nombre, Humano, se hace como se ve en el ejemplo, llamando a su namespace.
Utilizar un namespace por defecto
Para ello, en nuestro index.php utilizaremos la siguiente sintaxis.
index.php
<?php
// Esto indica que utilizaremos la carpeta Carpeta1
use Carpeta1\Humano;
require_once('29-Carpeta1/Humano.php');
require_once('29-Carpeta2/Humano.php');
$humano1 = new Humano;
$humano1->saludar();
Conflicto entre dos clases con el mismo nombre en dos carpetas distintas
En este caso lo que podemos hacer es darle distinto nombre mediante la keyword as, de la siguiente manera.
index.php
<?php
// Esto indica que utilizaremos la carpeta Carpeta1
use Carpeta1\Humano;
use Carpeta2\Humano as Humano2;
require_once('29-Carpeta1/Humano.php');
require_once('29-Carpeta2/Humano.php');
$humano1 = new Humano;
$humano1->saludar();
echo "<br />";
$humano2 = new Humano2;
$humano2->saludar();
