usesとimportの違い
結論から言うと、ロードするライブラリがオートロードの規約に従っているかどうかで使い分ける。
規約に従っている → App::uses()を使う。
規約に従っていない → App::import()を使う。
基本的にApp::import()を使う。
基本的に多くのVendorの読み込みにはApp::import()を使うのが吉。ほとんどのライブラリはCakePHPの規約に従って作られていないから。
CakePHP2.0規約
ベンダーのローディングは通常、規則に従わないパッケージのローディングを意味します。 多くのベンダーのパッケージに対しては App::import() の使用が推奨されます。
CakePHP2.0の公式ドキュメント
App::uses()を使うとパフォーマンス向上。
App::uses()は遅延ロードで、オートローダーがクラスの読み込みを管理して、クラスが使われない場合はロードしないように制御するのでパフォーマンスが向上する。但し、そのためにはファイルの作りがオートローダで制御するためのルールに従ってある必要がある。
App::uses()の使い方
// app/Vendor/Hoge.php内のHogeクラスをロードする。
App::uses('Hoge', 'Vendor');
サブディレクトリがある場合
サブディレクトリ内のクラスをロードするには、それらのパスを App::build() で追加する必要がある。
// app/Vendor/SomePackage/ClassInSomePackage.php 内の ClassInSomePackage クラスをロードする
App::build(array('Vendor' => array(APP . 'Vendor' . DS . 'SomePackage')));
App::uses('ClassInSomePackage', 'Vendor');
ベンダーのファイルは、規則に従っていなかったり、ファイル名と異なるクラスを持っていたり、クラスを含んでないかもしれません。 それらのファイルは App::import() を使用して読み込むことができます。 次の例では、いくつかのパス構造からベンダーファイルをロードする方法を示しています。 これらのベンダーファイルは、ベンダーのフォルダのいずれかに配置することができます。
CakePHP2.0公式ドキュメント
App::import()の使い方
// app/Vendor/hoge.phpをロードする
App::import('Vendor', 'hoge');
※ この場合hogeは小文字である必要がある。
サブディレクトリがある場合
// app/Vendor/hoge/fuga.phpをロードする。
App::import('Vendor', 'hoge/fuga');
ファイル名にドットが含まれる場合
// app/Vendor/hoge.fuga.phpをロードする。
App::import('Vendor', 'HogeFuga', array('file' => 'hoge.fuga.php'));
サブディレクトリがあってファイル名にドットが含まれる場合
// app/Vendor/piyo/hoge.fuga.phpをロードする。
App::import('Vendor', 'HogeFuga', array('file' => 'piyo'. DS . 'hoge.fuga.php'));
プラグインの中のVendorファイルを読み込む場合
// app/Plugin/Awesome/Vendor/services/well.named.php をロードする。
App::import('Vendor', 'Awesome.WellNamed', array('file' => 'services' . DS . 'well.named.php'));
注意点
usesとimportで引数の順番が逆になっている点に注意する。