ArrayObjectってforeachでも動くのね

id:balibali:20080507:1210179992 で使ってみた ArrayObject、これ foreach で書いても動くんですね。while で書かなきゃいけないかと勘違いしてた。

<?php
class Bumon implements Party
{
    private $_parties;
    private $_name;

    public function __construct($name)
    {
        $this->_name = $name;
        $this->_parties = new ArrayObject();
    }
    public function addParty($party)
    {
        $this->_parties->append($party);
    }
    public function display()
    {
        echo $this->_name . "\n";
        echo "-------------------\n";
        foreach ($this->_parties as $party) {
            $party->display();
        }
        echo "\n";
    }
}

ちなみに append も [] で置き換え可能だった。こっちは append の方が好きかもなあ。

自分が foreach 好きな理由は、ループの終了条件を意識しなくていいので安全というか気楽っていうのと、慣れかもしれないけど for や while より可読性が高い気がするっていう2点かなあ。実際、前回 while でループ書いたときに最初 next() 呼び忘れてて無限ループしちゃったし…

SPL昨日からいろいろ調べてみているのですが、もっとサンプルが欲しい。どこかにないんですかねえ。