Il est avantageux de les utiliser pour les projets importants où l’on importe de nombreux fichiers PHP avec des classes et des fonctions qui pourraient porter le même nom. Le namespace nous aide à éviter les conflits.
Afin de bien comprendre le principe, nous allons utiliser des exemples très simples. Dans la réalité les namespaces sont utiles seulement dans les projets plus complexes comme ceux développés sur Symfony ou tout autre framework.
Pour l’exemple nous allons travailler dans un dossier simple avec trois fichiers nommés: index.php, msg.php et data.php. L’index.php est le point d’entrée du site.
Tous les fichiers sont au même niveau. Les deux fichiers msg.php et data.php sont importés dans index.php.
index.phprequire_once('msg.php');
require_once('data.php');
Les fichiers msg.php et data.php ont chacun une fonction différente, mais qui porte le même nom get.
msg.phpfunction get() {
echo 'Voici le message: Bonjour !';
}
data.php
function get() {
echo 'Les données !';
}
Bien que nous ayons "require" les fonctions (des fichiers), si j’appelle la fonction get, il ne se passe rien car il y a un conflit (deux fonctions qui portent le même nom).
require_once('msg.php');
require_once('data.php');
// Rien ne se passe
get();
Pour pallier au problème, nous allons utiliser les namespaces.
Pour ajouter les namespaces, il faut utiliser le mot clé "namespace" dans les fichiers avec les fonctions et le mot clé "use" dans les fichiers qui ont besoin des fonctions.
msg.phpnamespace Henrique\msg;
function get() {
echo 'Voici le message: Bonjour !';
}
data.php
namespace Henrique\data;
function get() {
echo 'Les données !';
}
Nous pouvons maintenant utiliser la fonction adéquate en important le namespace choisi.
index.phprequire_once('msg.php');
require_once('data.php');
use function Henrique\msg\get;
// Affiche 'Voici le message: Bonjour !'
get();
Pour appeler les deux fonctions dans le même fichier, nous allons utiliser le mot clé "as".
require_once('msg.php');
require_once('data.php');
use function Henrique\msg\get as message;
use function Henrique\data\get as data;
// Affiche 'Voici le message: Bonjour !' et 'Les données !'
message();
data();
Le principe est le même pour les classes, mais la syntaxe est un peu différente. Pour aller plus vite, nous allons juste utiliser le fichier msg.php et transformer la fonction en classe.
namespace Henrique\msg;
class get {
public function message() {
echo 'Voici le message: Bonjour !';
}
}
require_once('msg.php');
require_once('data.php');
use Henrique\msg\get;
// Affiche 'Voici le message: Bonjour !'
$message = new get();
$message->message();
Me parler :
Si vous souhaitez me contacter, vous pouvez accéder à la page d'accueil.