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 |
---|
addNamespace(string $prefix, string $base_dir, boolean $prepend = false) : void
string
The namespace prefix.
string
A base directory for class files in the namespace.
boolean
If true, prepend the base directory to the stack instead of appending it; this causes it to be searched first rather than last.
loadClass(string $class) : mixed
string
The fully-qualified class name.
mixed
The mapped file name on success, or boolean false on failure.
loadMappedFile(string $prefix, string $relative_class) : mixed
string
The namespace prefix.
string
The relative class name.
mixed
Boolean false if no mapped file can be loaded, or the name of the mapped file that was loaded.
register() : void
requireFile(string $file) : boolean
string
The file to require.
boolean
True if the file exists, false if not.
prefixes : array
var |
---|
array