instanceof って便利

Zendを使うようになってから、同時に利用するようになったもの。
if 文での instanceof 判定。判定対象のオブジェクトの型を判定してくれる。

Dbから値を取得した際の処理に便利。

if ($rows instanceof Zend_Db_Table_Row)  の場合、
if ($rows instanceof Zend_Db_Table_RowSet) の場合。両方の処理を準備する。

Zend_Db_Table_Rowsetの場合は、Zend_Db_Table_Rowの場合の処理を
再帰的に呼び出すことでOKな場合も多々あります。

感覚でいうと1次元配列、2次元配列を気にせずに処理できるメソッドができる。
1次元配列と2次元配列を簡単に判定する方法を知らないから、とても便利に感じる。
たとえば、Dbから取得したカラム毎の合計値を取得するなら、
下記のように処理すればOKです。

public function getSumList($rows, $sumList=null)
{
 if (is_null($sumList)) $sumList = $this->getInitial();

 if (!is_null($rows)){
  if ($rows instanceof Zend_Db_Table_Row){
   $list = $rows->toArray();
   foreach ($list as $key => $value) $sumList[$key] += $value;
  }else if ($rows instanceof Zend_Db_Table_Rowset){
   foreach ($rows as $row) $sumList = $this->getSumList($row, $sumList);
  }
 }

 return $sumList;
}

$this->getInitial()は、$sumListに初期値を設定する関数です。
+= するためにnullだと気持ちが悪いので、0を設定しているだけの処理です。
カラム名は、Zend_Db_Table_Abstractクラスのinfo()関数で簡単にとってこれます。

カラム名の取得については、
http://framework.zend.com/manual/ja/zend.db.table.html#zend.db.table.info
10.5.10. テーブルのメタデータ情報の取得 を見てみてください。

instanceof って便利