Best autoloader from out there


License
BSD-4-Clause

Documentation

Autoloader Build Status Flattr this git repo

Autoloader generator for PHP.

Why?

Autoloaders are cool, but every project comes with their own autoloader. Your project ends up having more autoloader than proper code.

I'm a pragmatic developer, and I don't believe that's fair that we spend in our production environment, where files barely changes comparing to the number of executions, executing autoloaders over and over.

So as a proof of concept I started this project, that aims to generate an efficient autoloader. The generated autoloader has an array of classes and files. As an extra gift, the generated code will have a generic PSR-0 autoloader (borrowed from @alganet).

The autoloader now generates also loads all the class dependencies (parent classes, interfaces) in order to reduce the number of calls to the autoloaders.

Some features

  • No class to path transformation is done at run time. Autoloader creates a map of files and classes in a given directory.
  • When a class is loaded, all its dependencies are loaded (parent classes, interfaces). The goal is to reduce the number of calls to the autloader.
  • Always generate code that works with absolute paths (is --library is set, __DIR__ is being used instead)
  • Includes (except with the --library) a generic PSR-0 autoloader.

How it works

It was designed to be integrated in your deployment scripts.

require "lib/Autoloader/loader.php";

$generator = new \Autoloader\Generator("vendors/");
$generator->generate("autoloader.php");

Or if you know what you're doing, you can use an instance of Finder.

require "lib/Autoloader/loader.php";
$finder = \Symfony\Component\Finder\Finder();
$finder->files()->name('*.php')->in("vendors/");

$generator = new \Autoloader\Generator($finder);
$generator->generate("autoloader.php");

How to install (for developers)

In order to install you should use composer.

php composer.phar install

Using with composer

Composer is a great dependency manager, however I believe there is a lot of room for optimization in terms of autoloader generation. If you wish to have a better autoloader, one that can scan all your dependencies and your project (Whether they have configure the psr-0 or not). It will also add your local clases to the autoloader.

{
  "require": {
    "crodas/autoloader":"*"
  },
  "minimum-stability": "dev",
  "scripts": {
    "post-autoload-dump": "Autoloader\\Composer::generate"
  }
}

By overriding the post-autoload-dump it will replace the generated autoloader file, it will be called automatically however if you want to re-run it (for instance when you add a new class in your project and wish to be autoloaded) just run composer dump-autoload.