残念ながら 「爆速フレームワークの爆速オートローダーを使って爆速オートロードする方法」 ではありません。むしろこんな方法では低速になると思います。
次のようなディレクトリ構成だとします。
Root/
composer.json composer.json
src/
**/ いろいろ
vendor/
autoload.php autoload.php
**/ いろいろ
tests/
bootstrap.php PHPUnit の bootstrap (後述)
ClassLoader.php 差し替えオートローダー (後述)
**/ いろいろ
Composer\Autoload\ClassLoader
を差し替えるクラスを作成します。
vendor/composer/autoload_real.php
で必要となる最小限のメソッドだけ定義します。
ClassLoader.php
<?php
namespace Composer\Autoload;
class ClassLoader extends \Phalcon\Loader
{
public function addClassMap(array $classMap)
{
$this->registerClasses($classMap);
}
public function set($prefix, $paths)
{
$this->registerDirs(array_merge((array)$this->getDirs(), (array)$paths));
}
public function add($prefix, $paths)
{
$this->registerDirs(array_merge((array)$this->getDirs(), (array)$paths));
}
public function register()
{
parent::register();
}
}
本物の Composer\Autoload\ClassLoader
がロードされる前に差し替えクラスをロードします。
bootstrap.php
<?php
// 差し替えクラスをロード
require_once __DIR__ . '/ClassLoader.php';
// Composer\Autoload\ClassLoader
$loader = require __DIR__ . '/../vendor/autoload.php';
// テストとかで使う名前空間を追加
$loader->add('Tests', __DIR__);
何故こんなアホなことを?
大きめのフレームワークの内部の動作を追いたいとき、デバッガでステップ実行するととても便利ですが、普通にステップ実行するとオートローダーの中まで追跡してしまいかなりうざいです。そこ興味ないんで飛ばしてほしいです。
Eclipse PDT の「ステップフィルター」というものを使えば部分的に飛ばすことができそうな気がしたのですが、上手く動作する気配がありませんでした(デバッガが ZendDebugger でなければならない?)。
なので 「拡張モジュールならステップ実行されないから、拡張モジュールで PSR-0 なオートローダーないかなー」 とか考えていました。
.
.
.