Countableインターフェース

This Interface allows to hook into the global count() function.

PHP: Manual Quick Reference

Countableインターフェースに関する記事がなかったので一応書いてみる。これは何かというと、PHPのcount()関数で数えられるオブジェクトを作るためのインターフェースです。

まあコードみた方が早いですよね。

<?php
// countable.php
class Collection implements Countable
{
  protected $data = array();

  public function add($value)
  {
    $this->data[] = $value;
    return $this;
  }

  public function count()
  {
    return count($this->data);
  }
}

$collection = new Collection;
var_dump(count($collection));
$collection->add('foo')->add('bar')->add('baz');
var_dump(count($collection));
$ php countable.php
int(0)
int(3)

ただCoutableを実装すればいいだけじゃなく、実装した上でcount()メソッドを実装する必要があります。そしてそのcount()メソッドの戻り値が、そのままPHPのcount()関数を使ったときの戻り値に使われます。

ちなみにCountableを実装していない場合は、

$ php countable.php
int(1)
int(1)

このように、1つのオブジェクトということで1が返ってきます。

これだけだとあんまり意味はないんですが、ここから色々と派生して配列ライクなオブジェクトを作ろうと思ったときによりオブジェクトということを意識せずにすみますよね。