Base
Lorsqu'un programme devient plus complexe ou exploite du code développé par d'autres développeurs, le risque de conflits de noms de fonctions ou de variables augmente. Pour limiter et solutionner ces conflits, il est préférable de structurer la déclaration des fonctions et variables en ensembles cohérents appelés "espaces de noms".
Pour l'illustrer, considérons que nous avons récupéré deux librairies mathématiques; l'une dédiée à la manipulation d'entiers et l'autre de nombres à virgule flottante.
<?php //entier.php
namespace MesMaths\Entier;
function ajout(int $a, int $b): int {
return $a + $b;
}
?>
<?php //flottant.php
namespace MesMaths\Flottant;
function ajout(float $a, float $b): float {
return $a + $b;
}
?>
Comme vous pouvez le constater, ces deux librairies déclarent une fonction homonyme "ajout".
Pour les besoins de notre programme, nous allons étendre les fonctionnalités de ces deux librairies en y ajoutant la constante PI et une fonction d'affichage. Afin de gérer les dépendances de fichiers, nous allons inclure les appels à entier.php et flottant.php. Ce qui nous donne :
<?php //mesMaths.php
namespace MesMaths;
require_once 'entier.php';
require_once 'flottant.php';
const PI = 3.1415;
function affiche($val) {
echo "$val <br>";
}
?>
-
...soit en spécifiant implicitement le nom de l'espace nom concerné (Flottant\ajout($a, $b)
-
...soit en déclarant un alias (use function MesMaths\Entier\ajout as ajout;)
<?php //program.php
namespace MesMaths;
require_once 'mesMaths.php';
use function MesMaths\Entier\ajout as ajout;
use const MesMaths\PI as MON_PI;
$a = 9.56;
$b = 3.21;
echo 'Entier: ', ajout($a, $b), '<br>';
echo 'Flottant: ',Flottant\ajout($a, $b),'<br>';
affiche(MON_PI);
?>
Dans notre programme, "MON_PI" est un alias "pointant" vers la constante "PI" de l'espace de noms "MesMaths". De même, "ajout" est un alias vers la fonction "alias" du sous espace de noms "Entier" de l'espace de noms "MesMaths".
Expérience
Dans l'exemple ci-dessus, "program.php" fait partie de l'espace de noms "MesMaths".
Quelle simplification pourriez-vous faire dans ce code en tenant compte de cette information ?
Soluce
L'indication "MesMaths" est inutile dans la création des alias:
En corollaire, déclarer un alias sur la constante PI est superflu.Que faudrait-il changer si "program.php" ne fait plus partie de l'espace de noms "MesMaths" (suppression de la première instruction) ?