関数処理」って書いてあるのに可変変数のお話の続編です、すみません。
今回で片付いて、次回はまた関数関連の話に戻りますので、今しばらくおつきあいを頂ければ、と思います。
さて…タイミングによっては「さらりと便利」な可変変数ではありますが、2つほど問題がありますので、
その辺はしっかりと踏まえておきましょう、という話題を振るところでお話が終了しておりますので、
今回はその「2つの問題」を紐解いていきたいと思います。
一つは「変数名として使えない文字が使えてしまう」という問題があります。
簡単に実験コードを。
$data = array();
$data[‘test’] = ‘1’;
$data[‘_test’] = ‘2’;
$data[‘0test’] = ‘3’;
$data[‘te-st’] = ‘4’;
$data[‘te;st’] = ‘5’;
$data[‘te”st’] = ‘6’;
//
foreach($data as $key => $val) {
$$key = $val;
}
//
$hoge = ‘hoge';
$foo = ‘foo';
//
$awk = get_defined_vars();
unset($awk[‘_SERVER’]);
unset($awk[‘_POST’]);
unset($awk[‘_GET’]);
unset($awk[‘_FILES’]);
unset($awk[‘_COOKIE’]);
unset($awk[‘argv’]);
unset($awk[‘argc’]);
unset($awk[‘data’]);
var_dump($awk);
get_defined_vars() 関数は「全ての定義済の変数を配列で返す」関数です。
コードの後方に何行もあるunsetは「PHPが事前に定義している(可能性がある)」変数なんで、
今回の状況が見やすいように削ってます。
さて。
PHPの変数ですが、英数の他にはアンダースコアが使えるのみで、それ以外の記号は使えない事になっています
(正確には、 ‘[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*’ の正規表現的に正しいモノ、がOKとされているので、
日本語なども使用可能です…まぁまず滅多に使いませんが)。
しかし可変変数を使うと「それ以外の記号も使えてしまう」状況になります。
「使えるんだからイイじゃん」とか思いそうなところではあるのですが、例えばミスを誘発しそうなのが、こちら。
ん…まずは「問題ない」コードを一例。
この続きは以下をご覧ください
(リンク »)
お問い合わせにつきましては発表元企業までお願いいたします。