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. テーブルのメタデータ情報の取得 を見てみてください。