Debuggable.comのfelixgeが書いた「Cake 3 interview with Nate Abele」が面白かったので、日本語で要約したものを載せます。かなり要約してるので、本文をみた方が良いです。
http://debuggable.com/posts/Cake_3_interview_with_Nate_Abele:4a665a5e-5bfc-4e42-96ee-6d284834cda3
記事を読んだ感じ、Cake3はクロージャを使ったフィルターシステムに力を入れてるっぽいです。
下記、要約です。
- Cake2
- PHP5のみサポート
- CakePHP1.2や1.3と互換性を持たせる
- Cake2を使うだけで1.2などに比べて25%ぐらい高速になる
- Cake3
- ネームスペース
- コアをいくつかのパッケージに分けて独立させる(パッケージ間の依存関係を持たせない)
- コアコードをモジュールっぽくCake以外のアプリからも利用可能なように
- クロージャ
- フィルターシステム : 独自機能をクラスやメソッドに入れ込める
- フィルターシステムのインターフェースは標準化させる(学習のローコスト化)
- コアクラスのフィルターを1回書けば、他のコアクラスのフィルター方法もすぐに書けるようになる
- 現在フィルターシステムはインスタンスに対してのみ使えるけど、将来はクラスにも適用できるようにしたい
- 簡単にSQLシンタックスを修正、拡張できるようにする
- Cake3のサンプルコード
- 発行したSQLクエリを全てロギングしたい場合
- 1.2だとDatabaseクラスに手を入れる必要有(本質と関係ない処理まで入れるのは嫌だ)
- Cake3だと、SQLを実行する_execute()メソッドに対してロギングをするフィルターを簡単にかませることが出来る
<?php
Connections::get('default')->applyFilter('_execute', function($self, $params, $chain) {
$out = fopen('php://stderr');
fwrite($out, $params['sql']);
fclose($out);
return $chain->next($self, $params, $chain);
});
?>
- Collectionクラス
- 配列のように振舞うが、そこに含まれているオブジェクトのメソッドを呼び出せる
- Collectionクラスを継承したRecordSetオブジェクトを使うと、DBの結果を取得する際に、Lazy-fetchすることができる
クロージャについて分かりやすく書いてある記事
http://ryus.co.jp/modules/d3blog/details.php?bid=24