danog/class-finder

haydenpierce/class-finder 的分支,支持特性、接口和函数

0.4.8 2020-10-15 16:26 UTC

This package is auto-updated.

Last update: 2024-09-16 02:12:19 UTC


README

一个简单的工具,用于识别给定命名空间中的类、特性、函数和接口。

此包是对 Stack Overflow 上一个答案的改进实现,并且提供了更少的配置所需的附加功能。

要求

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

安装

通过 Composer 需求它来完成安装。

$ composer require danog/class-finder

目前不支持其他安装方法。

支持的自动加载方法

^ 实验。

* 计划。

** 未计划。如果需要此功能,请提出问题。

示例

标准模式

<?php

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

// Will default to ClassFinder::ALLOW_CLASSES
$classes = ClassFinder::getClassesInNamespace('TestApp1\Foo');
$classes = ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::ALLOW_CLASSES);
$interfaces = ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::ALLOW_INTERFACES);
$traits = ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::ALLOW_TRAITS);
$funcs = ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::ALLOW_FUNCTIONS);

// You can combine any of the flags
$interfacesTraits = ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::ALLOW_TRAITS | ClassFinder::ALLOW_INTERFACES);

/**
 * array(
 *   'TestApp1\Foo\Bar',
 *   'TestApp1\Foo\Baz',
 *   'TestApp1\Foo\Foo'
 * )
 */
var_dump($classes);
/**
 * array(
 *   'TestApp1\Foo\BarInterface',
 *   'TestApp1\Foo\FooInterface'
 * )
 */
var_dump($interfaces);
/**
 * array(
 *   'TestApp1\Foo\BazTrait',
 * )
 */
var_dump($traits);
/**
 * array(
 *   'TestApp1\Foo\myFunc',
 * )
 */
var_dump($funcs);
/**
 * array(
 *   'TestApp1\Foo\BarInterface',
 *   'TestApp1\Foo\FooInterface',
 *   'TestApp1\Foo\BazTrait',
 * )
 */
var_dump($interfacesTraits);

递归模式 (v0.3-beta)

<?php

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

// As before, will default to ClassFinder::ALLOW_CLASSES
$classes = ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::RECURSIVE_MODE);
$classes = ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::RECURSIVE_MODE | ClassFinder::ALLOW_CLASSES);
$interfaces = ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::RECURSIVE_MODE | ClassFinder::ALLOW_INTERFACES);
$traits = ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::RECURSIVE_MODE | ClassFinder::ALLOW_TRAITS);
$funcs = ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::RECURSIVE_MODE | ClassFinder::ALLOW_FUNCTIONS);


// You can combine any of the flags
$classesTraits = ClassFinder::getClassesInNamespace('TestApp1\Foo', ClassFinder::RECURSIVE_MODE | ClassFinder::ALLOW_CLASSS | ClassFinder::ALLOW_TRAITS);

/**
 * 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);

// You get the idea :)
var_dump($interfaces);
var_dump($traits);
var_dump($funcs);
var_dump($classesTraits);

文档

变更日志

异常:

内部

未来工作

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

  • 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 报告。不打算用于生产,但用于调试。