[PHP] 配列の+(プラス)演算子は便利

[PHP] 配列の+(プラス)演算子は便利

久しぶりにPHPの話題。

確かにPHPの配列の加算演算子はとても醜い仕様だと思う。

問. 配列を+(プラス)演算子で加算すると? : アシアルブログ

<?php
$fruit1 = array('apple', 'banana', 'cherry');
$fruit2 = array('kiwi', 'lemon', 'melon');

$fruit = $fruit1 + $fruit2;
?>

$fruitの値は次のA~Cのどれになるでしょうか?

A. array('apple', 'banana', 'cherry')
B. array('apple', 'banana', 'cherry', 'kiwi', 'lemon', 'melon')
C. array('kiwi', 'lemon', 'melon')

(中略)

正解は「A」です!

(中略)

ちなみに、私はてっきり「B」になるものと思ってました……。

+演算子の不思議な挙動も、配列と連想配列を一緒くたに扱うことから始まるPHPの悲劇の一つだと思うが、個人的にはとても大好きな仕様だったりする。特に↓のような使い方を頻繁に使うようになると手放せなくなる。

連想配列の初期値を保証する

関数にオプション配列を渡して関数の挙動を変えるというのは、PHPではよく使われるテクニックですが、↓のようなコードを書くとそのオプション配列のデフォルト値を保証できて便利。

function someFunction($options)
{
    $options += array('foo' => 'FooFooFoo',
                      'bar' => 'BarBarBar',
                      'baz' => 'BazBazBaz');

    //...

↑のコードは、↓のコードとほぼ同じ働きをします。

function someFunction($options)
{
    if (!isset($options['foo']))
        $options['foo'] = 'FooFooFoo';
    if (!isset($options['bar']))
        $options['bar'] = 'BarBarBar';
    if (!isset($options['baz']))
        $options['baz'] = 'BazBazBaz';

    //...

最初にオプション配列に初期値配列を加算してしまえば、いちいちisset()をかませなくてもNoticeが飛ばなくなるし、その上、関数の最初にデフォルト値が列挙してあれば、その関数が受け取るオプション値を確認しやすくて便利。

配列の長さを保証する

explode()なんかを使うときに、↓のような書き方をよくします。

list($prefix, $name) = explode('.', $str, 2) + array('prefix', 'name');

explode()は第3変数$limitを指定すれば、返り値の配列の長さの上限を設定することはできるけど、下限を設定することができない。でも、↑のように長さ2の配列を加算してしまえば、必ずlist($prefix, $name)に値がセットされることが保証できます。↑のコードは↓のコードとほぼ同じ働きをしますね。

$tmp = explode('.', $str, 2);
$prefix = isset($tmp[0]) ? $tmp[0] : 'prefix';
$name   = isset($tmp[1]) ? $tmp[1] : 'name';

まとめ

PHPの配列加算演算子は便利。余計なif文やisset()関数を減らすことができる。PHPにしては珍しく、プログラムコードを減らす方向に働いてくれる機能だと思う。

とはいえ、JavaScript等で用いられる「値を返す||(or)演算子」があれば、↑で挙げたような気持ち悪い+演算子の使い方は減らせるんだけどなorz

おまけ

PHPの配列加算演算子といい、JavaScriptの文字列結合演算子といい、なんで+(プラス記号)は気持ち悪いオーバーロードのされ方ばかりするんだろう。

スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/125-dace5396

トラックバック

PHPの配列結合演算子+(プラス)について考えてみた
配列結合演算子は「連想配列の継承」なのだという悟りが啓けたのでまとめてみました。
  • 2009-07-21
  • 発信元: 泥のように

コメント

コメントの投稿

お名前
コメント
編集キー