トミールの技術系日記

忍たまはじめました

なんでPimple、ArrayAccessなのかな〜

ふつうに $container->get('namae')でいいじゃんね作者がphp人生一度は訪れるというArrayAccess期だったんすかね〜と思ったのですが、


ところでArrayAccessとは!

これ。PHP: ArrayAccess - Manual

連想配列のようにアクセスできる(内部でメソッドが呼ばれる)というちょっとかっこいい機能である。perlだとTIEぽいかな。


もしコンテナに(オブジェクトではなく)連想配列を突っ込んで使う場合に、5.3でも直接その値のキーにアクセスできて便利だからじゃないかなーと思いました。

PHP 5.4 以降では、関数やメソッドの返す結果を直接配列として扱えるようになりました。 以前は、いったん一次変数に代入しないと配列としては扱えませんでした。

why Pimple uses ArrayAccess interface?

みたいな項目がトップにあっても良いかと思ったのですが、5.3が過去のものになりつつありますのでまあいいです

use Pimple\Container;

$container = new Container();
$container['namae'] = array('foo' => 'foooo');
print_r($container['namae']['foo']); // => "foooo" 5.3でも取れるぅ
function get($key)
{
    $c = array(
        'namae' => array( 'foo' => 'foooo')
    );

    return $c[$key];
}

print_r(get('namae')['foo']); // =>  PHP Parse error:  syntax error, unexpected '['