PHPの配列省略記法compact()が便利

Posted by Hiraku on 2011-10-13

CakePHPでは多用されているらしいのですが、知らなかったのでメモ。

タイトルの通り、PHPのcompact()という記法がとても便利です。このような配列を短く書くことができます。

$arr = array(
  'apple' => $apple,
  'orange' => $orange,
  'lemon' => $lemon,
);
// ↑
// 同じ意味
// ↓
$arr = compact('apple', 'orange', 'lemon');

これだけなんですが、この「キー名」=「ローカル変数名」な組み合わせで配列を作るケースって結構多いような気がします。今までcompactを知らなかったので、同じラベルを2回ずつ書くという不毛なことをずっとやっていました。。もったいないことをしていたものです。

そういえばcoffeescriptにも同等の省略記法がありますね。これのPHP版と考えるといいのかも。別に他の言語にもありそうですけど。

{apple: apple, orange: orange}
# ↑
# 同じ意味
# ↓
{apple, orange}

ぱっと思いつく使いどころ… Zend Frameworkだとビュースクリプトにパラメーターをassignするところとかですかね。

class IndexController
...(中略)...
  public function indexAction {
    $user = 'taro';
    $message = 'hello';

    $this->view->assign(compact('user', 'message'));

    //これと同義
    //$this->view->assign(array(
    //  'user' => $user,
    //  'message' => $message
    //));
  }
...(後略)...

他のフレームワークでも似たシーンがきっとあると思います。便利ですね。

そのほか思いついたこと

一部だけ「キー名」=「ローカル変数名」の関係が成り立たない場合でも、「+」演算子で配列を連結すればcompactを有効活用できます。もちろんcompactで定義した配列を何か変数に退避しておいて、後から動的に追加してもいいですが。

array(
  'apple' => $apple,
  'orange' => $orange,
  'lemon' => getLabel('lemon') //ここだけ直に埋め込みたい
);
// ↑
// 同じ意味
// ↓
compact('apple', 'orange')
  + array('lemon'=>getLabel('lemon'));

//compactが適用できない要素だけあとで連結する

keyword: PHP

PHPの最新記事

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。