kuria/class-loader

类加载器实现(PSR-0,PSR-4)

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

This package is auto-updated.

Last update: 2024-09-11 12:19:30 UTC


README

PHP 类加载器,实现了 PSR-0PSR-4 自动加载。

https://travis-ci.cn/kuria/class-loader.svg?branch=master

内容

特性

  • PSR-0 和 PSR-4 自动加载
  • 类映射
  • 自定义后缀
  • composer 桥接器
  • 调试模式

要求

  • PHP 7.1.0+

使用示例

注册前缀

<?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',
]);

使用 composer 桥接器

可以使用 ComposerBridge 类来初始化由 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();

禁用前缀

如果您正在使用优化的自动加载器,您可以在 configure() 中传递可选的第三个参数来完全禁用前缀。只有类映射和文件将被加载。

<?php

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

调试模式

如果启用了调试模式,在文件加载后执行检查以确定类、接口或特质是否在该文件中定义。

这有助于检测错误的或拼写错误的命名空间或类名。

要启用调试模式,请调用 $classLoader->setDebug(true) 或将 true 传递给适当的构造函数参数。