Azur Web
Henrique Rodrigues
Développeur Web

Comment utiliser un namespace sur PHP?

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 class 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.

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 palier 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 besoins 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 pour les class 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 class.

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();
Email
Cela ne fontionne pas.