Zend_Db_Table_Rowsetを拡張する

Zend_Db_Table_Rowsetのデータを削除したり、一括で更新したりするのに
foreach使っていたんですが、めんどうだなーと思って、拡張を考えました。

http://framework.zend.com/manual/ja/zend.db.table.rowset.html#zend.db.table.rowset.extending
上記を参考にして、以下のクラスを追加

class MyRowset extends Zend_Db_Table_Rowset_Abstract
{
    public function delete()
    {
        if (!$this->valid()) { return; }
        foreach ($this as $row) { $row->delete(); }
    }

    public function save()
    {
        if (!$this->valid()) { return; }
        foreach ($this as $row) { $row->save(); }
    }

    public function __set($key, $value)
    {
        if (!$this->valid()) { return; }
        foreach ($this as $row) { $row->{$key} = $value; }
    }
}

まだ動かしてないので、うまくいくかわからないけれど、メモとして残します。

あと、書き込み操作連鎖も初めて使ってます。
http://framework.zend.com/manual/ja/zend.db.table.relationships.html#zend.db.table.relationships.cascading

DBはMySQLで、外部キー制約を付けようと考えたのですが、対象テーブルにないキーが入ってしまうことがあるので、つけることができずに、上記の機能を利用することを考えました。
今までは、MySQLで外部キーつける権限がない時に使えるくらいの認識だったんですが、都合がいい部分だけ外部キー制約つけれるかもってことで、これは使えるんじゃないかと思います。

Tractor Scratch Duo登場

Tractor Scratch Proは、4つの音源を同時にならせること、
CD型とレコード型両方のコントローラーがあることが特徴でした。

現在よくクラブで使われているseratoと比較した点の優位点はそれで、
ソフトとしての安定性、ミキサーとの接続の簡単さはseratoが上というのがよくきく話です。

実際僕は、どちらもちゃんと使ったことがないので、なんとも言えませんが、
まだCDJにも音質的に負けているという話もありますが、聞き比べたこともないです。
興味はあったんですが、CDにもジャケットを印刷して識別しているので、
文字だけで曲を探すことに苦手意識があるので、情報だけ収集している状態が続いていました。

Tractor Scratch Duoという2つの音源の再生に機能を絞ったソフトが発売されたという
ニュースを見て、serato(こちらも2つの音源再生)に対抗してきたのかなーと何気なく眺めてたら、
曲の一覧のところに画像が取り込めている!!

これが一番の進化なんじゃないかと思います。
beatportと連携しているので、beatportで購入した曲は問題ないでしょうが、
他のダウンロードサイトで購入した曲に指定した画像を表示できるのかが気になるところです。
これがクリアできたら、俄然魅力的な商品になりますねー。
あとは、接続がどれだけ簡単にできるかが焦点です。

ファイルの読み書き

以前は、fopenして、fgetsとかfwriteばかりを使っていたけど、
以下のメソッドを頻繁に使うようになりました。

・file_get_contents
・file_put_contents

ファイルの書き込み、上書きに関しては、全部 file_put_contents。
読み込むファイルがすごく大きいときのみ、fgetsで1行ずつ読むようにしてます。
ファイルポインタの記述がないだけで、だいぶすっきりした気分になります。

よく使うようになったメソッド

ZendFrameworkを使うようになってからよく利用するメソッド

・method_exists
・call_user_func_array

modelの中にメソッドがない場合に、中で利用しているオブジェクトの中を
method_existsで調べて、メソッドが存在したら、call_user_func_arrayで呼び出す。
こういう使い方をして、controllerからdaoのメソッドを呼び出しています。

エラー処理も大体パターン化してきたので、近いうちにのせようと思っています。
いろんな指摘をもらえて、よりいいものにできたらと考えています。