< Retour

Comment utiliser un namespace sur PHP ?

Dans quel cas il est important d’utiliser le système de namespace ?

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.

Comprendre le problème

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.

Dossier projet PHP

Tous les fichiers sont au même niveau. Les deux fichiers msg.php et data.php sont importés dans index.php.

index.php
require_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.php
function 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();

Le problème est résolu grâce au namespace

Pour pallier au problème, nous allons utiliser les namespaces.

Utiliser une fonction

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.php
namespace 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.php
require_once('msg.php');
require_once('data.php');

use function Henrique\msg\get;

// Affiche 'Voici le message: Bonjour !'
get();

Utiliser deux fonctions

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();

Les namespaces pour les class

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();
Je veux parler avec Henrique

Me parler :

Si vous souhaitez me contacter, vous pouvez accéder à la page d'accueil.

Attendre
Patientez ...