Espais de noms (namespaces)
En el món de PHP, els espais de noms estan dissenyats per a solucionar dos problemes amb què es troben els autors de paquets i d'aplicacions en crear elements de codi reutilitzable, com ara classes o funcions:
- El conflicte de noms entre el codi que es crea i les classes/funcions/constants internes de PHP o les classes/funcions/constants de tercers.
- La capacitat de sobrenomenar (o abreujar)
Noms_Extra_Llargs
dissenyada per alleugerir el primer problema, millorant la llegibilitat del codi font.
Els espais de noms de PHP proporcionen una manera per agrupar classes, interfícies, funcions i constants relacionades.
En la seua definició més acceptada, els espais de noms són una manera d'encapsular elements. Exemple: directoris en els sistemes de fitxers.
El fitxer foo.txt
pot existir en els directoris /home/Greg
i /home/altre
, però no poden coexistir dues còpies de foo.txt
en el mateix directori.
A més, per accedir al fitxer foo.txt
fora de directori /home/Greg
, s'ha d'avantposar el nom de directori al nom del fitxer, emprant el separador de directoris per així obtenir /home/greg/foo.txt
.
Aquest mateix principi s'estén als espais de noms en el món de la programació.
Ús de namespaces
Per a definir un espai de noms utilitzem la paraula reservada namespace
.
namespace MyNamespace;
class MevaClasse {
public function saludar() {
echo "Hola des de MyNamespace!\n";
}
}
Per fer-ne ús d'un element de codi dintre d'un espai de noms cal usar la paraula
reservada use
// Incloure l'arxiu que conté la definició del namespace
require_once 'MyNamespace.php';
// Utilitzar la classe del namespace
use MyNamespace\MevaClasse;
// Crear una instància de la classe i cridar el mètode
$instancia = new MevaClasse();
$instancia->saludar();
El codi anterior inclou la classe en què hem definit l'espai de noms i després
la crida usant el use
.
Namespaces i autoloading
Com hem vist en l'apartat sobre Composer l'autocàrrega de classes ens facilita l'ús de classes pròpies i de tercers, però a això és molt important entendre com funcionen els espais de noms en PHP. Els frameworks solen utilitzar la recomanació PSR-4.
Per a entendre la relació entre els espais de noms i la càrrega automàtica de classes res millor que anar a la font original: PSR-4 Autoloader