omidgfx/class-finder

一个可以提供给定命名空间中类列表的库

0.5.3 2023-06-18 17:43 UTC

This package is auto-updated.

Last update: 2024-09-14 14:11:11 UTC


README

一个简单的工具,用于识别给定命名空间中的类。

此包是Stack Overflow上答案的改进实现,并提供了更少的配置需求的功能。

要求

  • 应用程序使用Composer。
  • 类可以通过Composer自动加载。
  • PHP >= 5.3.0

安装

通过Composer要求它来安装。

composer require haydenpierce/class-finder

注意:目前不支持其他安装方法,因为需要Composer来管理由ClassFinder识别的自动加载类。

支持的自动加载方法

^ 实验。

* 计划。

** 不计划。如果您需要此功能,请提交问题。

示例

标准模式

<?php

require_once __DIR__ . '/vendor/autoload.php';

ClassFinder::disablePSR4Vendors(); // Optional; see performance notes below
$classes = ClassFinder::getClassesInNamespace('TestApp1\Foo');

/**
 * array(
 *   'TestApp1\Foo\Bar',
 *   'TestApp1\Foo\Baz',
 *   'TestApp1\Foo\Foo'
 * )
 */
var_dump($classes);

递归模式

(自v0.3-beta版起可用)

<?php

require_once __DIR__ . '/vendor/autoload.php';

ClassFinder::disablePSR4Vendors(); // Optional; see performance notes below
$classes = ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::RECURSIVE_MODE);

/**
 * array(
 *   'TestApp1\Foo\Bar',
 *   'TestApp1\Foo\Baz',
 *   'TestApp1\Foo\Foo',
 *   'TestApp1\Foo\Box\Bar',
 *   'TestApp1\Foo\Box\Baz',
 *   'TestApp1\Foo\Box\Foo',
 *   'TestApp1\Foo\Box\Lon\Bar',
 *   'TestApp1\Foo\Box\Lon\Baz',
 *   'TestApp1\Foo\Box\Lon\Foo',
 * )
 */
var_dump($classes);

性能

大多数应用程序和库都依赖于PSR-4来自动加载类。为了检测这些类,ClassFinder会扫描您的应用程序文件以检查各种目录中的类。默认情况下,ClassFinder还会扫描vendor目录中的第三方类,以定位提供的命名空间中的潜在类。如果您的应用程序有很多第三方代码,这可能会非常慢。您可以使用ClassFinder::disablePSR4Vendors()来预先忽略这些类 - 当调用此函数时,后续对ClassFinder::getClassesInNamespace()的调用将跳过vendor目录中的任何扫描,并仅扫描composer.json中指定的用户定义的命名空间。

附加文档

变更日志

异常:

当识别到常见的配置错误时,将抛出以下异常

内部

欢迎对项目的贡献;请阅读以下有关测试如何工作的文档。这些信息不是在您的项目中使用ClassFinder包所必需的。

未来工作

警告:在1.0.0之前,预计错误修复不会回滚到旧版本。在0.X.Y的较小版本中,可能会引入向后不兼容的更改,其中X发生变化。

以下是为ClassFinder计划或提出的想法列表;欢迎合并请求添加任何这些功能。

  • 支持psr0

  • ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::RECURSIVE_MODE)。提供多层命名空间的类。(包含v0.3-beta版)

  • ClassFinder::getClassesImplementingInterface('TestApp1\Foo', 'TestApp1\FooInterface', ClassFinder::RECURSIVE_MODE)。过滤只实现特定命名空间的类。

  • ClassFinder::debugRenderReport('TestApp1\Foo\Baz')。解决由于命名空间中的错误、缺失目录等引起的“找不到类”错误的指导。会打印HTML报告。不打算用于生产,但用于调试。