Les espaces de nom (name space) vont permettre de manipuler des classes qui ont le même nom. C'est leur espace de nom (ou dossier virtuel) qui va permettre de les différencier.
Pour déclarer un espace de nom, on utilisera le mot clé "namespace". Attention, une fois qu'un espace de nom est déclaré dans un script php :
- il est utilisé par défaut. Si l'on veut utliser un autre espace de nom, il faudra le spécifier. "\" correspond à l'espace de nom habituellement utilisé par le php de base.
- il faudra quand même importer le fichier correspondant au namespace dans les autres fichiers via le mot clé "use" sauf à utiliser un autoloader (cf page suivante)
Par ailleurs, l'instruction de déclaration d'espace de noms doit être la toute première instruction.
<?php namespace Coopernet\memo; class Card { // déclaration d'une propriété public $test = "test"; function __construct($question, $answer) { $this->question = $question; $this->answer = $answer; $this->date = new \DateTime(); } // déclaration des méthodes public function dumpQuestion() { echo $this->question; } }
Autre solution, définir en amont l'espace de nommage auquel je vais faire appel.
<?php namespace Coopernet\memo; use \DateTime; class Card { // déclaration d'une propriété public $test = "test"; function __construct($question, $answer) { $this->question = $question; $this->answer = $answer; $this->date = new DateTime(); } // déclaration des méthodes public function dumpQuestion() { echo $this->question; } }
Pour faire appel à la classe en question Card précédement définie dans un namespace :
<?php include "classes/Card.php"; use Coopernet\memo\Card; $card = new Card("Nom de l'inventeur du web ?", "Tim Berners-Lee");
Alternative sans faire appel à use :
<?php $card = new \Coopernet\memp\Card();