Note : ce post publié ce matin était complètement faux et non terminé.

${variable}s

Dans un post récent sur heredoc et newdoc

Je disais que pour HEREDOC et pour les guillemets doubles,

${variable}s; // fonctionne
{$variable}s"; // fonctionne

Donc

testé sur PHP_VERSION:5.2.5
<?php

echo 
'<hr />';
highlight_file __FILE__ );
echo 
'<hr />';

$salut 'hello';
$salut_fr 'bonjour';
$b_fr 'yo man';
$b'salut';

printVar(${b} . "<br />${b}<br />{$b} ",'${b} . " ${b} {$b} "'); 
printVar("${$b}<br />$$b<br />" . $$b,'${$b} $$b " . $$b'); 
printVar("$b_fr<br />" . ${"b_fr"},'"$b_fr " . ${"b_fr"}'); 
printVar("${b}_fr<br />{$b}_fr",'${b}_fr {$b}_fr'); 
printVar("${$b}_fr",'${$b}_fr'); 
printVar(${$b."_fr"},'${$b."_fr"}'); 
//printVar("{${$b}_fr}",'${b}'); 

Mais depuis php 5.0 ${uneFonction()} fonctionne aussi



function donneUnNomDeVariable()
{
   return 
'salut';
}

printVar(${donneUnNomDeVariable()},'${donneUnNomDeVariable()}'); 
// FATAL ERROR printVar("{$donneUnNomDeVariable()}",'"{$donneUnNomDeVariable()}"'); 
// FATAL ERROR printVar("${$donneUnNomDeVariable()}",'"${$donneUnNomDeVariable()}"'); 
printVar(${donneUnNomDeVariable()}."_fr",'${donneUnNomDeVariable()}."_fr"'); 
printVar(${donneUnNomDeVariable()."_fr"},'${donneUnNomDeVariable()."_fr"}'); 

/**
 * Affiche le contenu de la variable
 * 
 * @param mixed $var la variable dont il faut afficher le contenu
 * @param string $varName le label
 * @return boolean true
 */
function printVar($var$varName '@') {
  static 
$varStaticInutile '3';
  
$varStaticInutile 5;
  
$bt debug_backtrace ();
  if (
is_array $bt ))
    
$bt array_reverse $bt );
  else {
    
$bt = array (array ('line' => '' ) );
  }
  
  echo 
'<p>' "\n" '[' $varName '] (line:' $bt [0] ['line'] . ') : ' "\n" '<pre style="color:red">' "\n" var_export $var) . '</pre>' "\n" '</p>' "\n";
  return 
true;
}

?>

[${b} . " ${b} {$b} "] (line:12) :

'salut
salut
salut '

[${$b} $$b " . $$b] (line:13) :

'hello
$salut
hello'

["$b_fr " . ${"b_fr"}] (line:14) :

'yo man
yo man'

[${b}_fr {$b}_fr] (line:15) :


'salut_fr
salut_fr'

[${$b}_fr] (line:16) :

'hello_fr'

[${$b."_fr"}] (line:17) :

'bonjour'

[${donneUnNomDeVariable()}] (line:27) :

'hello'

[${donneUnNomDeVariable()}."_fr"] (line:30) :

'hello_fr'

[${donneUnNomDeVariable()."_fr"}] (line:31) :

'bonjour'