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です。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 って便利 はコメントを受け付けていません。
コメントは閉じられています。

return top

%d人のブロガーが「いいね」をつけました。