kuria/class-loader

Class loader implementation (PSR-0, PSR-4)

v4.1.0 2023-06-11 09:47 UTC

This package is auto-updated.

Last update: 2024-04-11 11:27:48 UTC


README

PHP class loader that implements both PSR-0 and PSR-4 autoloading.

image

Features

  • PSR-0 and PSR-4 autoloading
  • class maps
  • custom suffixes
  • composer bridge
  • debug mode

Requirements

  • PHP 7.1.0+

Usage examples

Registering prefixes

<?php

use Kuria\ClassLoader\ClassLoader;

// load the class loader manually
require '/path/to/src/ClassLoader.php';

// create an instance
$debug = true; // true during development, false in production

$classLoader = new ClassLoader($debug);

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

// PSR-4 prefix
$classLoader->addPrefix('Foo\\Bar\\', 'vendor/foo/bar/src');

$classLoader->addPrefixes([
    'Kuria\\Error\\' => 'vendor/kuria/error/src',
    'Foo\\Baz\\' => 'example/foo/baz',
]);

// PSR-0 prefix
$classLoader->addPrefix('Example\\FooBar\\', 'vendor/example/foobar', ClassLoader::PSR0);

$classLoader->addPrefixes([
    'Kuria\\Error\\' => 'vendor/kuria/error/src',
    'Foo_' => 'example/foo',
], ClassLoader::PSR0);

// PSR-4 fallback (empty prefix)
$classLoader->addPrefix('', 'src');

// PSR-0 fallback (empty prefix)
$classLoader->addPrefix('', 'old-code/example', ClassLoader::PSR0);

// single class
$classLoader->addClass('Foo', 'path/to/foo.class.php');

// class map
$classLoader->addClassMap([
    'Bar' => 'path/to/bar.class.php',
    'Baz' => 'path/to/baz.class.php',
]);

Using the composer bridge

The ComposerBridge class can be used to initialize autoloading for packages managed by Composer.

<?php

use Kuria\ClassLoader\ClassLoader;
use Kuria\ClassLoader\ComposerBridge;

require __DIR__ . '/vendor/kuria/class-loader/src/ClassLoader.php';
require __DIR__ . '/vendor/kuria/class-loader/src/ComposerBridge.php';

$classLoader = new ClassLoader();

ComposerBridge::configure($classLoader, __DIR__ . '/vendor');

$classLoader->register();

Disabling prefixes

If you are using an optimized autoloader, you can pass an optional third parameter to configure() to disable prefixes completely. Only the class maps and files will be loaded.

<?php

ComposerBridge::configure($classLoader, __DIR__ . '/vendor', false);

Debug mode

If debug mode is enabled, a check is performed after a file has been loaded to determine whether the class, interface or trait was defined in that file.

This helps detect wrong or misspelled namespaces or class names.

To enable debug mode, call $classLoader->setDebug(true) or pass true to the appropriate constructor argument.