Psr4Autoloader

An example of a general-purpose implementation that includes the optional functionality of allowing multiple base directories for a single namespace prefix.

Given a foo-bar package of classes in the file system at the following paths ...

/path/to/packages/foo-bar/
    src/
        Baz.php             # Foo\Bar\Baz
        Qux/
            Quux.php        # Foo\Bar\Qux\Quux
    tests/
        BazTest.php         # Foo\Bar\BazTest
        Qux/
            QuuxTest.php    # Foo\Bar\Qux\QuuxTest

... add the path to the class files for the \Foo\Bar\ namespace prefix as follows:

 <?php
 // instantiate the loader
 $loader = new \Example\Psr4AutoloaderClass;

 // register the autoloader
 $loader->register();

 // register the base directories for the namespace prefix
 $loader->addNamespace('Foo\Bar', '/path/to/packages/foo-bar/src');
 $loader->addNamespace('Foo\Bar', '/path/to/packages/foo-bar/tests');

The following line would cause the autoloader to attempt to load the \Foo\Bar\Qux\Quux class from /path/to/packages/foo-bar/src/Qux/Quux.php:

 <?php
 new \Foo\Bar\Qux\Quux;

The following line would cause the autoloader to attempt to load the \Foo\Bar\Qux\QuuxTest class from /path/to/packages/foo-bar/tests/Qux/QuuxTest.php:

 <?php
 new \Foo\Bar\Qux\QuuxTest;
package

LightMVC/ASCMVC

Methods

Adds a base directory for a namespace prefix.

addNamespace(string $prefix, string $base_dir, boolean $prepend = false) : void

Arguments

$prefix

string

The namespace prefix.

$base_dir

string

A base directory for class files in the namespace.

$prepend

boolean

If true, prepend the base directory to the stack instead of appending it; this causes it to be searched first rather than last.

Loads the class file for a given class name.

loadClass(string $class) : mixed

Arguments

$class

string

The fully-qualified class name.

Response

mixed

The mapped file name on success, or boolean false on failure.

Load the mapped file for a namespace prefix and relative class.

loadMappedFile(string $prefix, string $relative_class) : mixed

Arguments

$prefix

string

The namespace prefix.

$relative_class

string

The relative class name.

Response

mixed

Boolean false if no mapped file can be loaded, or the name of the mapped file that was loaded.

Register loader with SPL autoloader stack.

register() : void

If a file exists, require it from the file system.

requireFile(string $file) : boolean

Arguments

$file

string

The file to require.

Response

boolean

True if the file exists, false if not.

Properties

An associative array where the key is a namespace prefix and the value is an array of base directories for classes in that namespace.

prefixes : array
var

Type(s)

array