可変変数で変数の値と同じ変数名の値を利用する
基本
下のコードのようにPHPで2つの変数を宣言したとします。
$engineer = 'kiyoharu'; $variable = 'engineer';
$variableには、engineerという文字列が格納されていますが、
var_dump(${$variable});
とすることで、$variable変数の値を変数名にとることが可能です。var_dump()の結果は以下の通りです。
string(8) "kiyoharu"
可変変数に文字列を連結して変数を宣言
可変変数に固定の文字列を追加して変数を宣言することが出来ます。
$variable = 'engineer'; ${"new_".$variable} = 'takeshi';
上のコードで、$new_engineer変数が利用可能になります。
var_dump($new_engineer);
var_dump()の結果は下の通りです。
string(7) "takeshi"
応用
可変変数の応用的な使い方として、繰り返し処理の中で
可変変数
を利用してみます。キャッシュデータの有無を繰り返し処理で確認し、キャッシュが無い場合はリクエストURLを構築します。キャッシュがある場合は、キャッシュデータを利用可能な状態にします。
リクエストURLを格納した変数を宣言します。
$engineer = 'http://engineer.local'; $architect = 'http://architect.local'; $designer = 'http://designer.local';
キャッシュデータを配列で構成します。実際には、キャッシュデータがnullであるか、有効であるかはタイミングにより異なる状態を想定しています。また、可変変数を利用できるように、上で宣言した変数名と配列のキー名を一致させておきます。
$a = array( 'engineer' => 'engineer cache data', 'architect' => null, 'designer' => 'designer cache data' );
以下のコードが繰り返し処理です。
キャッシュデータがnullであれば、新規にリクエストURLを構築します。キャッシュがある場合には、専用の変数にキャッシュデータを格納します。
foreach ($a as $key => $val) { if ( !$val ) { $request_url[$key] = ${$key}; } else { ${"cache_".$key} = $val; } }
可変変数を利用することで、配列内の値が動的に変わるデータ構造であっても、フレキシブルに繰り返し処理を行うことが出来ます。
ありがとうございます!助かりました!