Les bases
La difficulté avec les classes est que deux classes différentes ne peuvent pas avoir le même nom.
Dans des projets de grande envergure, il faut donc connaître l'ensemble des classes pour ne pas donner un nom existant à une nouvelle classe.
Pour pallier cette difficulté, il existe les espaces de noms.
Ce sont des espaces à l'intérieur desquels on écrit nos classes qui sont donc séparées des autres.
Méthode :
Exemple de deux classes MaClasse que l'on met dans deux espaces différents (Espace1 et Espace2).
Le mot clé namespace permet de créer l'espace.
espace1.php
namespace Espace1;
class MaClasse
{
public function espace(){
return "Je suis la classe ".__CLASS__." j'appartiens à " . __NAMESPACE__;
}
}
espace2.php
namespace Espace2;
class MaClasse
{
public function espace(){
return "Je suis la classe ".__CLASS__." j'appartiens à " . __NAMESPACE__;
}
}
__CLASS__ : retourne le nom de la classe de la méthode.
__NAMESPACE__ : retourne le nom de l'espace de la méthode.
Méthode : Utilisation
Un peu comme pour les URLs, on utilise nos classes comme si elles étaient dans des dossiers qui seraient les espaces :
require "espace1.php";
require "espace2.php";
$instance1 = new Espace1\MaClasse;
$instance2 = new Espace2\MaClasse;
echo $instance1->espace();
// affiche Je suis la classe Espace1\MaClasse j'appartiens à Espace1
echo $instance2->espace();
// affiche Je suis la classe Espace2\MaClasse j'appartiens à Espace2
Méthode : Alias
Pour rendre les noms plus courts, on peut créer des Alias.
Le mot clé use permet de définir la classe à utiliser et le mot clé as permet de lui donner un nom.
use Espace1\Maclasse as MaClasse1;
use Espace2\Maclasse as MaClasse2;
require "espace1.php";
require "espace2.php";
$instance1 = new MaClasse1;
$instance2 = new MaClasse2;
echo $instance1->espace();
// affiche Je suis la classe Espace1\MaClasse j'appartiens à Espace1
echo $instance2->espace();
// affiche Je suis la classe Espace2\MaClasse j'appartiens à Espace2
Méthode : as
Si vous omettez le mot clé as, c'est le dernier nom qui fait office d'alias.
use Espace1\Maclasse;
use Espace2\Maclasse as MaClasse2;
require "espace1.php";
require "espace2.php";
$instance1 = new MaClasse;
$instance2 = new MaClasse2;
echo $instance1->espace();
// affiche Je suis la classe Espace1\MaClasse j'appartiens à Espace1
echo $instance2->espace();
// affiche Je suis la classe Espace2\MaClasse j'appartiens à Espace2