<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.variables.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'language.variables.variable.php',
    1 => 'Les variables dynamiques',
    2 => 'Les variables dynamiques',
  ),
  'up' => 
  array (
    0 => 'language.variables.php',
    1 => 'Les variables',
  ),
  'prev' => 
  array (
    0 => 'language.variables.scope.php',
    1 => 'Port&eacute;e des variables',
  ),
  'next' => 
  array (
    0 => 'language.variables.external.php',
    1 => 'Variables externes &agrave; PHP',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'language/variables.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.variables.variable" class="sect1">
  <h2 class="title">Les variables dynamiques</h2>
  
  <p class="simpara">
   Il est pratique d&#039;avoir parfois des noms de variables qui sont variables.
   C&#039;est-à-dire un nom de variable qui est affecté et utilisé
   dynamiquement. Une variable classique est affectée avec
   l&#039;instruction suivante :
  </p>
  
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'bonjour'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);</span></span></code></div>
   </div>

  </div>
  
  <p class="simpara">
   Une variable dynamique prend la valeur d&#039;une variable et l&#039;utilise
   comme nom d&#039;une autre variable. Dans l&#039;exemple ci-dessous,
   <em>bonjour</em> peut être utilisé comme le nom d&#039;une
   variable en utilisant le &quot;$$&quot; précédant la variable.
   C&#039;est-à-dire :
  </p>
  
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'bonjour'</span><span style="color: #007700">;<br />$</span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'monde'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$bonjour</span><span style="color: #007700">);</span></span></code></div>
   </div>

  </div>
  
  <p class="simpara">
   À ce niveau, deux variables ont été définies et
   stockées dans l&#039;arbre des symboles PHP : <var class="varname">$a</var> avec comme valeur
   &quot;bonjour&quot; et <var class="varname">$bonjour</var> avec comme valeur &quot;monde&quot;. Alors, l&#039;instruction :
  </p>
  
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'bonjour'</span><span style="color: #007700">;<br />$</span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'monde'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$a</span><span style="color: #DD0000"> </span><span style="color: #007700">{$</span><span style="color: #0000BB">$a</span><span style="color: #007700">}</span><span style="color: #DD0000">"</span><span style="color: #007700">;</span></span></code></div>
   </div>

  </div>
  
  <p class="simpara">
   produira le même affichage que :
  </p>
  
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'bonjour'</span><span style="color: #007700">;<br />$</span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'monde'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$a</span><span style="color: #DD0000"> </span><span style="color: #0000BB">$bonjour</span><span style="color: #DD0000">"</span><span style="color: #007700">;</span></span></code></div>
   </div>

  </div>
  
  <p class="simpara">
   c&#039;est-à-dire : <span class="computeroutput">bonjour monde</span>.
  </p>
  
  <p class="simpara">
   Afin d&#039;utiliser des variables variables avec des tableaux,
   un problème d&#039;ambiguïté doit être résolu. En effet, si l&#039;analyseur rencontre
   <var class="varname">$$a[1]</var>, il doit déterminer si
   <var class="varname">$a[1]</var> devait être utilisé comme une variable, ou si
   <var class="varname">$$a</var> était attendu comme la variable, suivi de l&#039;indice <code class="literal">[1]</code>
   de cette variable. La syntaxe pour résoudre
   cette ambiguïté est la suivante : <var class="varname">${$a[1]}</var> pour le premier
   cas et <var class="varname">${$a}[1]</var> pour le deuxième.
  </p>
  
  <p class="simpara">
   On peut également accéder aux propriétés d&#039;une classe
   en utilisant les noms des variables. Le nom de la variable
   sera résolu en utilisant la portée depuis laquelle l&#039;appel
   s&#039;effectue. Par exemple, s&#039;il y a une expression de la forme
   <var class="varname">$foo->$bar</var>, alors la portée locale sera
   examinée pour <var class="varname">$bar</var> et sa valeur sera utilisée
   comme nom pour la propriété de <var class="varname">$foo</var>.
   Ce comportement reste valide si <var class="varname">$bar</var>
   est un tableau.
  </p>

  <p class="simpara">
   Les accolades peuvent aussi être utilisées pour clairement délimiter
   le nom de la propriété. Ceci est utile lors de l&#039;accès à des valeurs
   d&#039;une propriété qui contient un tableau, lorsque le nom de la propriété
   est composé de plusieurs parties, ou lorsque le nom de la propriété
   contient des caractères non valides (par exemple, depuis la fonction
   <span class="function"><a href="function.json-decode.php" class="function">json_decode()</a></span> ou <a href="book.simplexml.php" class="link">SimpleXML</a>).
  </p>
  
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Exemple #1 Exemple de propriété variable</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Foo </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= </span><span style="color: #DD0000">'I am bar.'</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$arr </span><span style="color: #007700">= [</span><span style="color: #DD0000">'I am A.'</span><span style="color: #007700">, </span><span style="color: #DD0000">'I am B.'</span><span style="color: #007700">, </span><span style="color: #DD0000">'I am C.'</span><span style="color: #007700">];<br />    public </span><span style="color: #0000BB">$r   </span><span style="color: #007700">= </span><span style="color: #DD0000">'I am r.'</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">Foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$baz </span><span style="color: #007700">= [</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">, </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">, </span><span style="color: #DD0000">'baz'</span><span style="color: #007700">, </span><span style="color: #DD0000">'quux'</span><span style="color: #007700">];<br />echo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$bar </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;{</span><span style="color: #0000BB">$baz</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]} . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$start </span><span style="color: #007700">= </span><span style="color: #DD0000">'b'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$end   </span><span style="color: #007700">= </span><span style="color: #DD0000">'ar'</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;{</span><span style="color: #0000BB">$start </span><span style="color: #007700">. </span><span style="color: #0000BB">$end</span><span style="color: #007700">} . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$arr </span><span style="color: #007700">= </span><span style="color: #DD0000">'arr'</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]} . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">}[</span><span style="color: #0000BB">1</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;</span></span></code></div>
    </div>

    <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
I am bar.
I am bar.
I am bar.
I am r.
I am B.
</pre></div>
    </div>
   </div>
  </p>
  
  <div class="warning"><strong class="warning">Avertissement</strong>
   <p class="simpara">
    Il est à noter que les variables dynamiques ne peuvent pas être utilisées
    avec les
    <a href="language.variables.superglobals.php" class="link">tableaux Superglobaux</a> dans
    une fonction ou une classe. La variable <code class="literal">$this</code> est aussi
    une variable spéciale qui ne peut être référencée dynamiquement.
   </p>
  </div>
  
 </div><?php manual_footer($setup); ?>