<?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.faq.php',
    1 => 'Foire aux questions',
    2 => 'Foire aux questions : ce qu\'il faut savoir des espaces de noms',
  ),
  'up' => 
  array (
    0 => 'language.namespaces.php',
    1 => 'Les espaces de noms',
  ),
  'prev' => 
  array (
    0 => 'language.namespaces.rules.php',
    1 => 'R&egrave;gles de r&eacute;solution de noms',
  ),
  'next' => 
  array (
    0 => 'language.enumerations.php',
    1 => 'Les &eacute;num&eacute;rations',
  ),
  '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.faq" class="sect1">
  <h2 class="title">Foire aux questions : ce qu&#039;il faut savoir des espaces de noms</h2>
  
  <p class="verinfo">(PHP 5 &gt;= 5.3.0, PHP 7, PHP 8)</p>
  <p class="para">
   Cette FAQ est décomposée en deux sections : les questions courantes,
   et les points particuliers de l&#039;implémentation, qui peuvent être
   utiles à la compréhension globale.
  </p>
  <p class="para">
   D&#039;abord, les questions courantes.
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.shouldicare" class="link">Si je n&#039;utilise pas d&#039;espaces
      de noms, est-ce que je dois m&#039;en soucier ?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.globalclass" class="link">Comment utiliser une classe
      globale ou interne depuis un espace de noms ?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.innamespace" class="link">Comment utiliser les classes
      d&#039;espaces de noms, les fonctions ou les constantes dans leur propre espace ? </a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.full" class="link">
       Comment est-ce qu&#039;un nom comme <code class="literal">\mon\nom</code> ou
       <code class="literal">\nom</code> est résolu ?
      </a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.qualified" class="link">Comment est-ce qu&#039;un nom
      tel que <code class="literal">mon\nom</code> est résolu ?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.shortname1" class="link">Comment un nom de classe
      sans qualification, tel que <code class="literal">nom</code>, est résolu ?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.shortname2" class="link">Comment une fonction sans
      qualification ou une constante de nom <code class="literal">nom</code> est résolue ?</a>
     </span>
    </li>
   </ol>
  </p>
  <p class="para">
   Voici les points particuliers de l&#039;implémentation, qui peuvent être
   utiles à la compréhension globale.
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.conflict" class="link">Les noms importés ne doivent
      pas entrer en conflit avec les classes définies dans le même fichier</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.nested" class="link">Les espaces de noms imbriqués
      sont interdits</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.quote" class="link">Les noms d&#039;espaces de noms
      dynamiques doivent protéger l&#039;antislash</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.constants" class="link">Des constantes indéfinies
      référencées avec un antislash produisent une erreur fatale</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.builtinconst" class="link">Impossible de remplacer
      des constantes spéciales comme <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> ou <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></a>
     </span>
    </li>
   </ol>
  </p>
  <div class="sect2" id="language.namespaces.faq.shouldicare">
   <h3 class="title">Si je n&#039;utilise pas d&#039;espaces de noms, est-ce que je dois m&#039;en soucier ?</h3>
   <p class="para">
    Non, les espaces de noms n&#039;affectent pas le code existant, d&#039;une
    manière ou d&#039;une autre, ni le code qui sera produit et qui n&#039;utilise
    pas les espaces de noms. Il est possible d&#039;écrire ceci :
   </p>
   <p class="para">
    <div class="example" id="example-1">
     <p><strong>Exemple #1 Accès à une classe globale de l&#039;extérieur d&#039;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 />$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">\stdClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    C&#039;est une fonctionnalité équivalente à :
   </p>
   <p class="para">
    <div class="example" id="example-2">
     <p><strong>Exemple #2 Accéder à des classes globales hors d&#039;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 />$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.globalclass">
   <h3 class="title">Comment utiliser une classe globale ou interne depuis un espace de noms ?</h3>
   <p class="para">
    <div class="example" id="example-3">
     <p><strong>Exemple #3 Accès aux classes internes 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 /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">\stdClass</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">\ArrayObject $parameter_type_example </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\DirectoryIterator</span><span style="color: #007700">::</span><span style="color: #0000BB">CURRENT_AS_FILEINFO</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// extension d'une classe interne ou globale<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyException </span><span style="color: #007700">extends </span><span style="color: #0000BB">\Exception </span><span style="color: #007700">{}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.innamespace">
   <h3 class="title">
    Comment utiliser les classes d&#039;espaces de noms, les fonctions ou
    les constantes dans leur propre espace ?
   </h3>
   <p class="para">
    <div class="example" id="example-4">
     <p><strong>Exemple #4 Accès aux classes, fonctions et constantes internes dans 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 />class </span><span style="color: #0000BB">MaClasse </span><span style="color: #007700">{}<br /><br /></span><span style="color: #FF8000">// utilisation d'une classe dans l'espace de noms courant, sous forme de type de paramètre<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">MaClasse $parameter_type_example </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {}<br /><br /></span><span style="color: #FF8000">// une autre manière d'utiliser une classe dans l'espace de noms courant comme type de paramètre<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">\foo\MaClasse $parameter_type_example </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {}<br /><br /></span><span style="color: #FF8000">// extension d'une classe dans l'espace de noms courant<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Extended </span><span style="color: #007700">extends </span><span style="color: #0000BB">MaClasse </span><span style="color: #007700">{}<br /><br /></span><span style="color: #FF8000">// accès à une fonction globale<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\globalfunc</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// accès à une constante globale<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">\INI_ALL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.full">
   <h3 class="title">
     Comment est-ce qu&#039;un nom comme <code class="literal">\mon\nom</code> ou
       <code class="literal">\nom</code> est résolu ?
   </h3>
   <p class="para">
    Les noms qui commencent par <code class="literal">\</code> sont toujours résolus en ce
    à quoi ils ressemblent, ce qui fait que <code class="literal">\mon\nom</code> est en fait
    <code class="literal">mon\nom</code>, et <code class="literal">\Exception</code> est
    <code class="literal">Exception</code>.
    <div class="example" id="example-5">
     <p><strong>Exemple #5 Noms d&#039;espaces absolus</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 /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">\mon\nom</span><span style="color: #007700">(); </span><span style="color: #FF8000">// instancie la classe "mon\nom"<br /></span><span style="color: #007700">echo </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 "strlen"<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\INI_ALL</span><span style="color: #007700">; </span><span style="color: #FF8000">// $a reçoit la valeur de la constante "INI_ALL"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.qualified">
   <h3 class="title">Comment est-ce qu&#039;un nom tel que <code class="literal">mon\nom</code> est résolu ?</h3>
   <p class="para">
    Les noms qui contiennent un antislash mais ne commencent pas par un
    antislash, comme <code class="literal">mon\nom</code> peuvent être résolus de deux manières
    différentes.
   </p>
   <p class="para">
    S&#039;il y a eu une commande d&#039;importation qui fait un alias de
    <code class="literal">mon</code>, alors l&#039;alias importé est appliqué à la place
    de <code class="literal">mon</code>, et l&#039;espace de noms devient <code class="literal">mon\nom</code>.
   </p>
   <p class="para">
    Sinon, l&#039;espace de noms courant est ajouté avant le chemin de la classe
    <code class="literal">mon\nom</code>.
   </p>
   <p class="para">
    <div class="example" id="example-6">
     <p><strong>Exemple #6 Noms qualifiés</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 />use </span><span style="color: #0000BB">blah\blah </span><span style="color: #007700">as </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">mon\nom</span><span style="color: #007700">(); </span><span style="color: #FF8000">// instancie la classe "foo\mon\nom"<br /></span><span style="color: #0000BB">foo\bar</span><span style="color: #007700">::</span><span style="color: #0000BB">name</span><span style="color: #007700">(); </span><span style="color: #FF8000">// appelle la méthode statique "name" dans la classe "blah\blah\bar"<br /></span><span style="color: #0000BB">mon\bar</span><span style="color: #007700">(); </span><span style="color: #FF8000">// appelle la fonction "foo\mon\bar"<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">mon\BAR</span><span style="color: #007700">; </span><span style="color: #FF8000">// affecte à $a la valeur de la constante "foo\mon\BAR"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.shortname1">
   <h3 class="title">Comment un nom de classe
    sans qualification, tel que <code class="literal">nom</code>, est résolu ?</h3>
   <p class="para">
    Les noms de classes qui ne contiennent pas d&#039;antislash comme
    <code class="literal">nom</code> peuvent être résolus de deux manières différentes.
   </p>
   <p class="para">
    S&#039;il y a une instruction d&#039;importation qui définit un alias pour <code class="literal">nom</code>,
    alors l&#039;alias est appliqué.
   </p>
   <p class="para">
    Sinon, l&#039;espace de noms courant est utilisé et préfixé à
    <code class="literal">nom</code>.
   </p>
   <p class="para">
    <div class="example" id="example-7">
     <p><strong>Exemple #7 Classes sans qualification</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 />use </span><span style="color: #0000BB">blah\blah </span><span style="color: #007700">as </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">nom</span><span style="color: #007700">(); </span><span style="color: #FF8000">// instancie la classe "foo\nom"<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">::</span><span style="color: #0000BB">nom</span><span style="color: #007700">(); </span><span style="color: #FF8000">// appelle la méthode statique "nom" dans la classe "blah\blah"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.shortname2">
   <h3 class="title">
    Comment une fonction sans qualification ou une constante
    de nom <code class="literal">nom</code> est résolue ?
   </h3>
   <p class="para">
    Les fonctions et constantes qui n&#039;ont pas d&#039;antislash dans leur nom
    comme <code class="literal">nom</code> sont résolues de deux manières différentes :
   </p>
   <p class="para">
    D&#039;abord, l&#039;espace de noms courant est préfixé à <code class="literal">nom</code>.
   </p>
   <p class="para">
    Ensuite, si la constante ou la fonction <code class="literal">nom</code> n&#039;existe pas
    dans l&#039;espace de noms courant, la version globale de la constante ou la
    fonction <code class="literal">nom</code> est utilisée.
   </p>
   <p class="para">
    <div class="example" id="example-8">
     <p><strong>Exemple #8 Fonctions et constantes sans 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 />use </span><span style="color: #0000BB">blah\blah </span><span style="color: #007700">as </span><span style="color: #0000BB">foo</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 /><br />function </span><span style="color: #0000BB">mon</span><span style="color: #007700">() {}<br />function </span><span style="color: #0000BB">foo</span><span style="color: #007700">() {}<br />function </span><span style="color: #0000BB">sort</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$a</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">\sort</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">); </span><span style="color: #FF8000">// Appel de la fonction globale "sort"<br />    </span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">array_flip</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br />    return </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">mon</span><span style="color: #007700">(); </span><span style="color: #FF8000">// appelle "foo\mon"<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" car "foo\strlen" n'existe pas<br /></span><span style="color: #0000BB">$arr </span><span style="color: #007700">= array(</span><span style="color: #0000BB">1</span><span style="color: #007700">,</span><span style="color: #0000BB">3</span><span style="color: #007700">,</span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">sort</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">); </span><span style="color: #FF8000">// appelle la fonction "foo\sort"<br /></span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">foo</span><span style="color: #007700">(); </span><span style="color: #FF8000">// appelle la fonction "foo\foo" : l'importation n'est pas appliquée<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// assigne à $a la valeur de la constante "foo\FOO" : l'importation n'est pas appliquée<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">// assigne à $b la valeur de la constante "INI_ALL"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.conflict">
   <h3 class="title">Les noms importés ne doivent
    pas entrer en conflit avec les classes définies dans le même fichier</h3>
   <p class="para">
    La combinaison de scripts suivante est valide :
    <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">mes\trucs</span><span style="color: #007700">;<br />class </span><span style="color: #0000BB">MaClasse </span><span style="color: #007700">{}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <p class="simpara">another.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">another</span><span style="color: #007700">;<br />class </span><span style="color: #0000BB">untruc </span><span style="color: #007700">{}<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">mes\trucs</span><span style="color: #007700">;<br />include </span><span style="color: #DD0000">'file1.php'</span><span style="color: #007700">;<br />include </span><span style="color: #DD0000">'another.php'</span><span style="color: #007700">;<br /><br />use </span><span style="color: #0000BB">another\untruc </span><span style="color: #007700">as </span><span style="color: #0000BB">MaClasse</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">MaClasse</span><span style="color: #007700">; </span><span style="color: #FF8000">// instancie la classe "untruc" de l'espace de noms another<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    Il n&#039;y a pas de conflit de noms, même si la classe <code class="literal">MaClasse</code> existe
    dans l&#039;espace de noms <code class="literal">mes\trucs</code>, car la définition de
    <code class="literal">MaClasse</code> est dans un fichier séparé. Cependant, l&#039;exemple
    suivant produit une erreur fatale à cause d&#039;un conflit de noms, car
    <code class="literal">MaClasse</code> est définie dans le même fichier que l&#039;instruction
    <code class="literal">use</code>.
    <div class="informalexample">
     <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">mes\trucs</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">another\untruc </span><span style="color: #007700">as </span><span style="color: #0000BB">MaClasse</span><span style="color: #007700">;<br />class </span><span style="color: #0000BB">MaClasse </span><span style="color: #007700">{} </span><span style="color: #FF8000">// erreur fatale: MaClasse est en conflit avec la commande d'importation<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">MaClasse</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.nested">
   <h3 class="title">Les espaces de noms imbriqués sont interdits</h3>
   <p class="para">
    PHP ne permet pas d&#039;imbriquer des espaces de noms.
    <div class="informalexample">
     <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">mes\trucs </span><span style="color: #007700">{<br />    namespace </span><span style="color: #0000BB">nested </span><span style="color: #007700">{<br />        class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{}<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    Cependant, il est facile de simuler des espaces de noms imbriqués,
    comme ceci :
    <div class="informalexample">
     <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">mes\trucs\nested </span><span style="color: #007700">{<br />    class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{}<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>

  <div class="sect2" id="language.namespaces.faq.quote">
   <h3 class="title">Les noms d&#039;espaces de noms dynamiques doivent protéger l&#039;antislash</h3>
   <p class="para">
    Il est très important de réaliser que, comme les antislash sont utilisés comme
    caractères de protection dans les chaînes, il faut toujours les doubler
    pour pouvoir les utiliser dans une chaîne. Sinon, il y a un risque d&#039;utilisation
    inattendue :
    <div class="example" id="example-9">
     <p><strong>Exemple #9 Dangers de l&#039;utilisation des espaces de noms dans une chaîne</strong></p>
     <div class="example-contents">
      <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #DD0000">"dangereux\nom"</span><span style="color: #007700">; </span><span style="color: #FF8000">// \n est une nouvelle ligne dans une chaîne!<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'pas\vraiment\dangereux'</span><span style="color: #007700">; </span><span style="color: #FF8000">// aucun problème ici<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    Dans une chaîne à guillemets simples, la séquence de protection est beaucoup plus
    sûre à utiliser, mais il est quand même recommandé de toujours protéger
    les antislashs dans toutes les chaînes comme bonne pratique.
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.constants">
   <h3 class="title">Des constantes indéfinies référencées avec un antislash produisent une erreur fatale</h3>
   <p class="para">
    Toute constante indéfinie qui est sans qualificatif telle que
    <code class="literal">FOO</code> va produire une alerte : PHP supposait que
    <code class="literal">FOO</code> était la valeur de la constante. Toute constante,
    qualifiée partiellement ou totalement, qui contient un antislash,
    produit une erreur fatale si indéfinie.
    <div class="example" id="example-10">
     <p><strong>Exemple #10 Constantes indéfinies</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">bar</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// produit une alerte : constante indéfinie "FOO", qui prend la valeur de "FOO";<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// erreur fatale, constante d'espace de noms indéfinie FOO<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">Bar\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// erreur fatale, constante d'espace de noms indéfinie bar\Bar\FOO<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\Bar\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// erreur fatale, constante d'espace de noms indéfinie Bar\FOO<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.builtinconst">
   <h3 class="title">Impossible de remplacer des constantes spéciales comme <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> ou <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></h3>
   <p class="para">
    Toute tentative dans un espace de noms de remplacer les constantes
    natives ou spéciales, engendre une erreur fatale.
    <div class="example" id="example-11">
     <p><strong>Exemple #11 Constantes qui ne peuvent être redéfinies</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">bar</span><span style="color: #007700">;<br />const </span><span style="color: #0000BB">NULL </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #FF8000">// erreur fatale;<br /></span><span style="color: #007700">const </span><span style="color: #0000BB">true </span><span style="color: #007700">= </span><span style="color: #DD0000">'stupid'</span><span style="color: #007700">; </span><span style="color: #FF8000">// encore une erreur fatale;<br />// etc.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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