作成日:2006/05/10
1E.5 可変変数
- 構文:可変変数
- $$変数名 OR ${$変数名}
- {$変数名}の値が変数名になります
- {$変数名}で${$変数名}を間接参照しています
PHPには可変変数と呼ばれるものがあります。 可変変数とはシンボリックリンクの事です。 Perlのシンボリックリンクと殆ど同じ概念です。 また、シンボリックリンクは間接参照構文なのでC言語のポインタに近い概念です。 C言語のポインタはプロセス空間の仮想メモリアドレスですが、 PHPの可変変数やPerlのシンボリックリンクは変数の値で変数名を間接的に参照します。 これは、シンポルテーブル(変数名とその値を管理しているテーブル)をメモリ上で動的に保持している インタプリタ特有の間接参照の方法です。
用例:
$bar = "bot";
$foo = "bar";
echo $$foo; // botを出力します
echo ${$foo}; // 上と同じ事です
$$foo = "bot2"; // $barに"bot2"を代入します
配列で可変変数を使用する際には、曖昧さの問題を解決する必要があります。 $$a[0]と書いた場合、 可変変数名は $a[0] なのか $aなのかです。
- ${$変数名[キー]} --- $変数名[キー]を可変変数名(スカラー)として扱う場合
- ${$変数名}[キー] --- $変数名を可変変数名(配列)として扱う場合
用例:
$a = array('red','green','blue');
$red = 'apple';
echo $$a[0]; // 'apple'を出力(曖昧)
echo ${$a[0]}; // 'apple'を出力(推奨)
$a = 'red';
$red = array('apple','tomato','carrot');
echo ${$a}[0]; // 'apple'を出力
echo {$$a}[0]; // こんな表記はエラー(変数を表記する構文でない)
