変数名を可変にできると便利なことが時々あります。 可変変数では、変数名を動的にセットし使用できます。 通常の変数は、次のような命令でセットします。
$a = "hello";
可変変数は、変数の値をとり、変数の名前として扱います。 上の例では、hello は、ドル記号を 二つ使用することにより、変数の名前として使用することができます。 つまり、
$$a = "world";
ここまでで、二つの変数が定義され、PHP シンボルツリーに定義されています。 これらは、"hello" を値とする $a と "world" を値とする $hello です。 そこで、次の命令、
echo "$a ${$a}";
の出力は、次の命令と全く同じとなります。
echo "$a $hello";
すなわち、両方共、hello world を出力します。
可変変数を配列で使用する際には、曖昧さの問題を解決する必要があります。 つまり、$$a[1] と書いた場合、$a[1] を変数として使用したいのか、 $$a を変数とし [1] を変数の添え字としたいのかを、パーサが知る必要が あるのです。 この曖昧さを解決するには、前者では ${$a[1]} とし、 後者では ${$a}[1] とする構文を用います。