PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPの可変変数(Variable Variables)の使い方を徹底解説

はじめに

PHPでは、変数名を動的に設定することができます。このような変数は、既存の変数の値を新しい変数名として利用するもので、「可変変数(Variable Variables)」と呼ばれます。可変変数は、ドル記号($)を2つ重ねた「$$変数名」の形式で定義します。

基本的な例

<?php
$var1="xyz"; //通常の変数
$$var1="abcd";//可変変数
echo $var1 . "\n";
echo $$var1 . "\n";
echo "{$$var1} $xyz";
?>

実行結果

このスクリプトを実行すると、次の出力が得られます。

xyz
abcd
abcd abcd

$$var1 の値が $xyz と同じになっている点に注目してください。これは、$var1 の値が「xyz」であるため、$$var1 が $xyz として解釈されるからです。これが可変変数の基本的な仕組みです。

数値は変数名として使えない

通常の変数に代入された数値は、可変変数の変数名として使用できません。PHPの変数名は文字またはアンダースコアで始まる必要があるためです。

<?php
$var1=100; //通常の変数
$$var1=200;//可変変数
echo $var1 . "\n";
echo $$var1 . "\n";
echo $100;
?>

実行結果

このスクリプトを実行すると、次のようなパースエラーが発生します。

PHP Parse error: syntax error, unexpected '100' (T_LNUMBER), expecting variable (T_VARIABLE) or '{' or '$' line 6

このように、数値から始まる変数名は構文エラーとなるため、可変変数を利用する際は変数名の命名規則に従う必要があります。

配列の要素を変数名にする

可変変数は、配列の添字(インデックス)と組み合わせて定義することも可能です。次の例では、通常の配列の0番目の要素を使って可変変数を定義しています。

<?php
$var1=array("aa","bb"); //通常の変数
${$var1[0]}=10;//配列要素を使った可変変数
echo $var1[0] . "\n";
echo $aa . "\n";
echo ${$var1[0]} . "\n";
?>

実行結果

このスクリプトを実行すると、次の出力が得られます。

aa
10
10

波括弧({})で囲むことで、配列の特定の要素を変数名として明確に指定できます。$var1[0] の値が「aa」であるため、${$var1[0]} は $aa と同じ意味になります。

クラスのプロパティへの応用

可変変数の仕組みは、クラスのプロパティにも適用できます。プロパティ名を動的に指定することで、柔軟にプロパティへアクセス可能です。特に、プロパティ名が配列などで構成される場合に便利な機能です。

<?php
var $u = "Architecture";
var $ugCourses = array("CSE","MECH","CIVIL");
$obj = new branches();
$courses = "ugCourses";
echo $obj->{$courses[0]} . "\n";
echo $obj->{$courses}[0] . "\n";
?>

※この例では、branches クラスが定義済みであることを前提としています。

実行結果

このスクリプトを実行すると、次の出力が得られます。

Architecture
CSE

$obj->{$courses[0]} は $courses の最初の文字「u」を使って $obj->u にアクセスし、$obj->{$courses}[0] は $obj->ugCourses 配列の0番目の要素を参照します。このように波括弧の位置によって解釈が変わるため、意図した動作に合わせて正しく記述することが重要です。

  1. PHPのextract()関数とは?使い方とパラメータを徹底解説

    extract()関数とはPHPのextract()関数は、配列のキーと値を現在のシンボルテーブルに変数としてインポートする関数です。連想配列の各要素が「キー名=変数名、値=変数の値」として展開され、戻り値としては正常に抽出された変数の個数が返されます。構文extract(arr, rules, prefix)パラメータarr − 変数として展開したい対象の配列を指定します。rules − 無効な変数名や既存変数との衝突(コンフリクト)が発生した場合の扱い方を指定します。指定できる値は以下の通りです。EXTR_OVERWRITE − デフォルト値。同名の変数が既に存在する場合、既存の変数を上書

  2. 【初心者向け】PowerShellの変数の基本:作成・確認・削除・追加の方法をわかりやすく解説

    コンピュータサイエンスにおいて、変数とは後で利用するために任意の情報を格納しておくメモリ上の場所のことです。言い換えれば、データを一時的に保存し、必要なときに取り出すための「入れ物」です。シェル環境では、そのデータは単語(文字列)でも数字(整数)でも構いません。 パソコンで意識的に変数を使ったことがない人でも、日常生活の中で変数に近いものを使っているはずです。「あれを取って」「これを見て」といった言葉は、文法上の変数(いわゆる代名詞)と言えます。「これ」「あれ」が何を指すのかは、話し手が頭に思い浮かべているものや指差している対象によって決まります。数学でも未知の値を記号で表しますが、それも立派