「関数処理関数編 その5(または可変変数編 その2)」

ヒューマンリソシア

2015年9月28日 12:50

※この記事は読者によって投稿されたユーザー投稿のため、編集部の見解や意向と異なる場合があります。 また、編集部はこの内容について正確性を保証できません。
ヒューマンリソシア株式会社はコラム「関数処理関数編 その5(または可変変数編 その2)」を公開しました。 関数処理」って書いてあるのに可変変数のお話の続編です、すみません。 今回で片付いて、次回はまた関数関連の話に戻りますので、今しばらくおつきあいを頂ければ、と思います。 さて…タイミングによっては「さらりと便利」な可変変数ではありますが、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とされているので、 日本語なども使用可能です…まぁまず滅多に使いませんが)。 しかし可変変数を使うと「それ以外の記号も使えてしまう」状況になります。 「使えるんだからイイじゃん」とか思いそうなところではあるのですが、例えばミスを誘発しそうなのが、こちら。 ん…まずは「問題ない」コードを一例。 この続きは以下をご覧くださいhttp://resocia.jp/column/1401/
この記事のキーワード

人気記事トップ10

人気記事ランキングをもっと見る