ねこさんとへびさんの新人技術ブログ

新人エンジニアのねこさんとへびさんの、技術向上のためのブログです。

Tips!PHP 変数名に変数を使う - 可変変数

PHPでは変数に変数を用いることができます。

例えば条件に応じて$pattern_{変数}のように変数名を動的に扱いたいとき、

<?php
     $pattern_red = 'rose';
     $pattern_blue = 'sky';
     
     $condition = 'other';
     if($condition === 'apple'){
         $val = 'red';
     }else{
         $val = 'blue';
     }
    
    echo ${"pattern_" . $val}; // skyが出力される
?>

とすると、$conditionの値によってechoする変数を変えることができます。
このように変数を可変にすることを可変変数といいます。

可変変数

ドル記号を二つ使用することにより、変数の名前にすることができます。

<?php
  $identifier = 'hebisan';
  $$identifier = 'blackmanba';
 
  echo $$identifier;    // blackmanbaが出力される
  echo $hebisan;    // blackmanbaが出力される

上記の例では、$$identifierは$identifierがhebisanと解釈され、$hebisanという変数に'blackmanba'が代入されることになります。
$$identifierも$hebisanも両方とも、’blackmanba'を出力します。

しかし可変変数をダブルクォーテーションで括った場合には、

<?php
 echo "$$identifier"; // $hebisanが出力される
?>

$identifierの部分のみ変数と扱われ、'$hebisan'が出力されます。

<?php
 echo "${$identifier}"; // blackmanbaが出力される
?>

$identifierを波括弧で括ることにより、$$identifierが可変変数であることをパーサに明示的に示すと'blackmanba'が出力されます。

サンプル

可変変数を使用し、$week配列から$week1~$week7の変数を作成する。

<?php
$week = array('Mon', 'Tues', 'Wednes', 'Thurs', 'Fri', 'Satur', 'Sun');

for($i=1; $i<=7; $i++){
  ${"week" . $i} = $week[$i-1];
}

echo $week5; // Friが出力される
?>

参考:PHPマニュアル

(byへびさん)