<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.namespaces.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'language.namespaces.basics.php',
    1 => 'Introduction',
    2 => 'Utilisation des espaces de noms : introduction',
  ),
  'up' => 
  array (
    0 => 'language.namespaces.php',
    1 => 'Les espaces de noms',
  ),
  'prev' => 
  array (
    0 => 'language.namespaces.definitionmultiple.php',
    1 => 'D&eacute;finition de plusieurs espaces de noms dans le m&ecirc;me fichier',
  ),
  'next' => 
  array (
    0 => 'language.namespaces.dynamic.php',
    1 => 'Espaces de noms et langage dynamique',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'language/namespaces.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.namespaces.basics" class="sect1">
  <h2 class="title">Utilisation des espaces de noms : introduction</h2>
  
  <p class="verinfo">(PHP 5 &gt;= 5.3.0, PHP 7, PHP 8)</p>
  <p class="para">
   Avant de discuter de l&#039;utilisation des espaces de noms, il est important de
   comprendre comment PHP devine quel espace de noms le code utilise. Une
   analogie simple peut être faite entre les espaces de noms de PHP et un système
   de fichiers. Il y a trois moyens d&#039;accéder à un fichier dans un système de
   fichiers :
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      Un nom relatif de fichier, tel que <code class="literal">foo.txt</code>. Cela est résolu
      en <code class="literal">dossiercourant/foo.txt</code> où <code class="literal">dossiercourant</code> est le
      dossier de travail. Si le dossier courant est <code class="literal">/home/foo</code>,
      ce nom se résout en <code class="literal">/home/foo/foo.txt</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Un chemin relatif, tel que <code class="literal">sous-dossier/foo.txt</code>. Cela se
      résout en <code class="literal">dossiercourant/sous-dossier/foo.txt</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Un chemin absolu, tel que <code class="literal">/main/foo.txt</code>. Cela se résout
      en <code class="literal">/main/foo.txt</code>.
     </span>
    </li>
   </ol>
   Le même principe peut être appliqué aux espaces de noms de PHP.
   Par exemple, on peut faire référence à une classe de trois manières :
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      Un nom sans qualificatif, ou une classe sans préfixe, telle que
      <code class="literal">$a = new foo();</code> ou
      <code class="literal">foo::methodestatique();</code>. Si le namespace courant
      est <code class="literal">espacedenomscourant</code>, ceci se résout en
      <code class="literal">espacedenomscourant\foo</code>. Si le namespace est
      global, soit encore le namespace sans nom, cela devient <code class="literal">foo</code>.
     </span>
     <span class="simpara">
      Une mise en garde : les noms sans qualificatif pour les fonctions et les
      constantes vont être pris dans le namespace global, si la fonction
      n&#039;est pas définie dans le namespace courant. Voir
      <a href="language.namespaces.fallback.php" class="link">Utilisation des espaces de noms :
      retour au namespace global pour les fonctions et les constantes</a> pour
      plus de détails.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Un nom qualifié, ou une classe préfixée telle que
      <code class="literal">$a = new sousespacedenoms\foo();</code> ou
      <code class="literal">sousespacedenoms\foo::methodestatique();</code>. Si le namespace courant
      est <code class="literal">espacedenomscourant</code>, cela devient
      <code class="literal">espacedenomscourant\sousespacedenoms\foo</code>. Si
      le code est global, c&#039;est-à-dire le namespace sans nom,
      cela devient <code class="literal">sousespacedenoms\foo</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Un nom absolu, ou un nom préfixé avec un opérateur global tel que
      <code class="literal">$a = new \espacedenomscourant\foo();</code> ou
      <code class="literal">\espacedenomscourant\foo::methodestatique();</code>. Cela fait toujours
      référence au nom littéral spécifié dans le code : <code class="literal">espacedenomscourant\foo</code>.
     </span>
    </li>
   </ol>
  </p>
  <p class="para">
   Voici un exemple des trois syntaxes, dans du code réel :
   <div class="informalexample">
    <p class="simpara">file1.php</p>
    <div class="example-contents">
     <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">Foo\Bar\sousespacedenoms</span><span style="color: #007700">;<br /><br />const </span><span style="color: #0000BB">FOO </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />function </span><span style="color: #0000BB">foo</span><span style="color: #007700">() {}<br />class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    static function </span><span style="color: #0000BB">methodestatique</span><span style="color: #007700">() {}<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <p class="simpara">file2.php</p>
    <div class="example-contents">
     <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">Foo\Bar</span><span style="color: #007700">;<br />include </span><span style="color: #DD0000">'file1.php'</span><span style="color: #007700">;<br /><br />const </span><span style="color: #0000BB">FOO </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br />function </span><span style="color: #0000BB">foo</span><span style="color: #007700">() {}<br />class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    static function </span><span style="color: #0000BB">methodestatique</span><span style="color: #007700">() {}<br />}<br /><br /></span><span style="color: #FF8000">/* nom non qualifié */<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Devient Foo\Bar\foo<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">::</span><span style="color: #0000BB">methodestatique</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Devient Foo\Bar\foo, méthode methodestatique<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// Devient la constante Foo\Bar\FOO<br /><br />/* nom qualifié */<br /></span><span style="color: #0000BB">sousespacedenoms\foo</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Devient la fonction Foo\Bar\sousespacedenoms\foo<br /></span><span style="color: #0000BB">sousespacedenoms\foo</span><span style="color: #007700">::</span><span style="color: #0000BB">methodestatique</span><span style="color: #007700">(); </span><span style="color: #FF8000">// devient la classe Foo\Bar\sousespacedenoms\foo,<br />                                  // méthode methodestatique<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">sousespacedenoms\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// Devient la constante Foo\Bar\sousespacedenoms\FOO<br /><br />/* nom absolu */<br /></span><span style="color: #0000BB">\Foo\Bar\foo</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Devient la fonction Foo\Bar\foo<br /></span><span style="color: #0000BB">\Foo\Bar\foo</span><span style="color: #007700">::</span><span style="color: #0000BB">methodestatique</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Devient la classe Foo\Bar\foo, méthode methodestatique<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">\Foo\Bar\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// Devient la constante Foo\Bar\FOO<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   Il est à noter que pour accéder à n&#039;importe quelle classe, fonction ou constante
   globale, un nom absolu peut être utilisé, tel que
   <span class="function"><a href="function.strlen.php" class="function">\strlen()</a></span> ou <span class="classname"><a href="class.exception.php" class="classname">\Exception</a></span> ou
   \<strong><code>INI_ALL</code></strong>.
   <div class="example" id="example-1">
    <p><strong>Exemple #1 Accès aux classes, fonctions et constantes globales depuis un espace de noms</strong></p>
    <div class="example-contents">
     <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">Foo</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">strlen</span><span style="color: #007700">() {}<br />const </span><span style="color: #0000BB">INI_ALL </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br />class </span><span style="color: #0000BB">Exception </span><span style="color: #007700">{}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\strlen</span><span style="color: #007700">(</span><span style="color: #DD0000">'hi'</span><span style="color: #007700">); </span><span style="color: #FF8000">// appelle la fonction globale strlen<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">\INI_ALL</span><span style="color: #007700">; </span><span style="color: #FF8000">// accès à une constante INI_ALL<br /></span><span style="color: #0000BB">$c </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'error'</span><span style="color: #007700">); </span><span style="color: #FF8000">// instancie la classe globale Exception<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div><?php manual_footer($setup); ?>