A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

3.2. Les espaces de noms PHP

Lorsque vous utilisez des classes de différentes bibliothèques (ou même des classes provenant de différents composants d'une même bibliothèque) dans votre programme, les noms de classe peuvent entrer en conflit. Cela signifie que vous pouvez rencontrer deux classes ayant le même nom, ce qui entraîne une erreur d'interpréteur PHP. Si vous avez déjà programmé des applications avec Zend Framework 1, vous pouvez vous souvenir de ces noms de classe très longs comme Zend_ControllerAbstract. L'idée avec des noms longs a été utilisée pour éviter les collisions de noms entre différents composants. Chaque composant a défini son propre préfixe de nom, comme `Zend ou My_`.

Pour atteindre le même objectif, Zend Framework 3 utilise une fonctionnalité de langage PHP appelée namespaces. Les espaces de noms permettent de résoudre les conflits de noms entre les composants de code et vous permettent de raccourcir les noms longs.

Un espace de noms est un conteneur pour un groupe de noms. Vous pouvez imbriquer des espaces de noms entre eux. Si une classe ne définit pas un espace de noms, elle réside à l'intérieur de l'espace de noms global (par exemple, les classes PHP Exception et DateTime appartiennent à l'espace de noms global).

Un exemple réel d'une définition d'espace de noms (prise à partir du composant Zend\Mvc component) est présenté ci-dessous :

<?php
namespace Zend\Mvc;

/**
 * Classe d'application principale pour l'appel d'applications.
 */
class Application
{
    // ... les membres de la classe ont été omis pour la simplicité ...
}

Dans Zend Framework 3, toutes les classes appartiennent à l'espace de noms Zend de niveau supérieur. La ligne 2 définit l'espace de noms Mvc, qui est imbriqué dans l'espace de noms Zend et toutes les classes de ce composant (y compris la classe Application représentée dans cet exemple sur les lignes 7-10) appartiennent à cet espace de noms. Vous séparez les noms d'espaces de noms imbriqués avec un back-slash ('\').

Dans d'autres parties du code, vous faites référence à la classe Application en utilisant son nom qualifié complet :

<?php
$application = new \Zend\Mvc\Application();

Veuillez noter qu'il y a un premier back-slash dans \Zend\Mvc\Application. Si vous spécifiez un nom de classe avec un back-slash en début de chaîne, cela signifie que le nom de classe est entièrement spécifié. Il est également possible de spécifier le nom de la classe par rapport à l'espace de noms courant, auquel cas vous ne spécifiez pas la barre oblique inverse.

Il est également possible d'utiliser l'alias (nom abrégé de la classe) à l'aide de l'instruction use de PHP :

<?php
// Définit l'alias au début du fichier.
use Zend\Mvc\Application;

// Plus tard dans votre code, utilisez le nom de la classe abrégée.
$application = new Application();

Bien que l'alias permette d'utiliser un nom de classe court au lieu du nom complet, son utilisation est facultative. Vous n'êtes pas obligé de toujours utiliser des alias et pouvez référencer la classe par son nom complet.

Chaque fichier PHP de votre application spécifit généralement un namespace (à l'exception du script d'entrée index.php et des fichiers de configuration). Par exemple, le module principal de votre site, le module Application, définit son propre espace de noms dont le nom est égal au nom du module :

<?php
namespace Application;

class Module
{
    // ... les membres de la classe ont été omis pour la simplicité ...
}

Top