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

※この記事は読者によって投稿されたユーザー投稿です:
  • 編集部の見解や意向と異なる内容の場合があります
  • 編集部は内容について正確性を保証できません
  • 画像が表示されない場合、編集部では対応できません
  • 内容の追加・修正も編集部では対応できません

ヒューマンリソシア株式会社はコラム「関数処理関数編 その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/

この記事が役に立ったらシェア!
メルマガの登録はこちら Web担当者に役立つ情報をサクッとゲット!

人気記事トップ10(過去7日間)

今日の用語

ERP
Enterprise Resource Planningの略。「ERP」(企業資 ...→用語集へ

インフォメーション

RSSフィード


Web担を応援して支えてくださっている企業さま [各サービス/製品の紹介はこちらから]