Возможно ли в php получить список классов, которые используют определенную черту?

Я хочу получить список классов, которые используют определенную черту, например:

trait Baz { }

class Foo { use Baz; }

class Bar { use Baz; }$classes = getClassesThatUseTrait('Baz');

// $classes is ['Foo', 'Bar']

Является ли это возможным?

0

Решение

Вы можете сделать что-то вроде этого

trait foo { }

class bar {
use foo;
}

class bar2 {
}

$trait = 'foo';

// get user defined classes
$definedClasses = array_filter(
get_declared_classes(),
function($className) {
return !call_user_func(
array(new ReflectionClass($className), 'isInternal')
);
}
);

// select only classes that use trait $trait
$classes = array_filter(
$definedClasses,
function($className) use($trait) {
$traits = class_uses($className);
return isset($traits[$trait]);
}
);

var_dump($classes);
1

Другие решения

Ну, у пакета отражений есть такой метод для работы с чертами:

  • ReflectionClass::getTraitAliases
  • ReflectionClass::getTraitNames
  • ReflectionClass::getTraits
  • ReflectionClass::isTrait

Нет метода «получить все классы, использующие черту X».

Если у вас есть список всех классов, которые определяет ваш код, то вы можете использовать один из вышеупомянутых методов (ReflectionClass::getTraits например), а затем сравните характеристики, используемые классом, с характеристикой, которую вы ищете. Однако вам придется загружать все классы в вашем приложении, что не очень эффективно и не практично.

Если вы можете ограничить свой поиск небольшим подмножеством ваших классов, то выполнение чего-то подобного может работать достаточно хорошо.

Интересно, почему вы чувствуете, что должны делать что-то подобное, как бы то ни было. Это не то, что люди обычно делают. Это странно.

0

По вопросам рекламы [email protected]