LoginSignup
8

More than 5 years have passed since last update.

Composer の オートローダーだけ Phalcon に差し替える

Last updated at Posted at 2013-09-06

残念ながら 「爆速フレームワークの爆速オートローダーを使って爆速オートロードする方法」 ではありません。むしろこんな方法では低速になると思います。


次のようなディレクトリ構成だとします。

 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 なオートローダーないかなー」 とか考えていました。

.
.
.

ありました「Universal Class Loader — Phalcon 1.2.2 documentation

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8