PHPにはcompact、extratと言う関数がある。
CakePHPをやっている人なら、compactは何度かお目にかかった事があるんじゃなかろうか。
PHP公式マニュアルを斜め読みしながら開発をしていると、知っているけど実はちゃんと分かっていなかったと言うことがたくさんあるとおもう。
今回はcompactとextractを試してみようと思う。
まずはextractだ。
int extract ( array $var_array [, int $extract_type = EXTR_OVERWRITE [, string $prefix ]] )これはつまりどういうことかと言うと、実際にやってみると早い。
配列からシンボルテーブルに変数をインポートします
というわけで、以下のソースを試して見た。
- $account = array(
- 'id' => 'someone@example.com',
- 'password' => 'mypassword',
- 'screenname' => 'sam',
- );
- extract($account);
id、password、screennameをキーとして、それぞれsomeone@example.com、mypassword、samをバリューとして持つ、只の連想配列(ハッシュ)だが、この連想配列をextractすると、以下のような変数が生成される。
変数 | 値 |
---|---|
$id | someone@example.com |
$password | mypassword |
$screenname | sam |
可変変数を可能にしたPHPらしい関数だ。
使い道は少ないとは思うが、あると便利な関数ではないだろうか。
次に、extractの逆になるcompactを試してみる。
array compact ( mixed $varname [, mixed $... ] )extractは「連想配列>変数へ展開」 だったが、compactは逆なので、「変数>連想配列に格納」となる。
変数名とその値から配列を作成します。
あらかじめいくつかの変数を定義しておく必要があるので、以下のように設定しておいた。
- $id = 'someone@example.com';
- $password = 'mypassword';
- $screenname = 'sam';
- $account = compact('id', 'passwd', 'screenname');
そしてcompact化した変数accountをみて見ると、連想配列になっているのが分かる。
最終的なソースは以下になる。
- $id = 'someone@example.com';
- $password = 'mypassword';
- $screenname = 'sam';
- $account = compact('id', 'passwd', 'screenname');
- echo "<pre>";
- print_r($account);
- echo "</pre>";
Array ( [id] => someone@example.com [password] => mypassword [screenname] => sam )まさにextractとcompactは逆だ。
そしてこれらのCakePHPでの使用用途だ。
ずばり言うと、$this->setで使うと考えておいて良い。
$begin、$end、$idをそれぞれ同じ変数名としてビュースクリプトへセットしたい場合、通常はこのような記述をすると思う。
- $this->set('begin', $begin);
- $this->set('end', $end);
- $this->set('id', $id);
ただしあらかじめ連想配列にしておく必要がある。
- $datas = array(
- 'begin'=>$begin,
- 'end'=>$end,
- 'id'=>$id
- );
- $this->set(compact('datas'));
とはいえ、$this->setする際、なるべくひとつのデータを送っておいた方が楽なのではないか、と思う。
いちいちidなど、個別にセットしておくと、たとえば一気にデータを消す際、変数の数だけ処理をしなくてはならなくなる。
というわけで、それほどcompactの用途は多くは無さそうだ。
facebook
twitter
google+
fb share