Salta el contingut

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