基礎

PHPの可変変数|変数名を動的に生成する

可変変数(Variable Variables)は、変数の値を別の変数名として使う機能です。$$(ドルマーク2つ)を使って、変数名を動的に生成できます。

基本的な使い方

PHP
<?php
$varName = "greeting";  // 変数名を文字列として格納
$$varName = "こんにちは";  // $greeting = "こんにちは" と同じ

echo $greeting;          // こんにちは
echo "<br>";
echo $$varName;          // こんにちは(同じ結果)
?>
実行結果
こんにちは
こんにちは

$varName"greeting" という文字列が入っているとき、$$varName$greeting と同じ意味になります。つまり、変数名を文字列で指定して、間接的にアクセスできるのです。

ループと組み合わせた例

PHP
<?php
// 連番の変数を動的に生成
for ($i = 1; $i <= 3; $i++) {
    $name = "item" . $i;
    $$name = "商品" . $i;
}

echo $item1 . "<br>";  // 商品1
echo $item2 . "<br>";  // 商品2
echo $item3 . "<br>";  // 商品3
?>
実行結果
商品1
商品2
商品3
可変変数より配列を使おう

上記のような連番データの管理には、可変変数ではなく配列を使うべきです。可変変数はコードの可読性が著しく低下し、デバッグも困難になります。実務では配列やオブジェクトを使いましょう。

配列での代替

PHP(推奨される書き方)
<?php
// 可変変数の代わりに配列を使う
$items = [];
for ($i = 1; $i <= 3; $i++) {
    $items["item{$i}"] = "商品{$i}";
}

echo $items["item1"];  // 商品1
print_r($items);
?>
可変変数が使われる場面

フレームワークの内部やテンプレートエンジンなど、変数名を動的に解決する必要がある場合に使われます。通常のアプリケーション開発で使うことはほぼありません。

まとめ

  • $$で変数の値を別の変数名として使える(可変変数)
  • 変数名を文字列で指定して間接的にアクセスする仕組み
  • 実務では可変変数より配列やオブジェクトを使う方が安全で可読性が高い