我想要得到的是使用某些性狀類的列表,如:是否有可能在PHP中獲得使用特定特徵的類的列表?
trait Baz { }
class Foo { use Baz; }
class Bar { use Baz; }
$classes = getClassesThatUseTrait('Baz');
// $classes is ['Foo', 'Bar']
這可能嗎?
我想要得到的是使用某些性狀類的列表,如:是否有可能在PHP中獲得使用特定特徵的類的列表?
trait Baz { }
class Foo { use Baz; }
class Bar { use Baz; }
$classes = getClassesThatUseTrait('Baz');
// $classes is ['Foo', 'Bar']
這可能嗎?
好,反射封裝具有與性狀工作這些方法:
ReflectionClass::getTraitAliases
ReflectionClass::getTraitNames
ReflectionClass::getTraits
ReflectionClass::isTrait
沒有「得到的所有類,使用特質X「方法。
如果你有一個你的代碼定義的所有類的列表,那麼你可以使用上面提到的方法之一(例如ReflectionClass::getTraits
),然後比較特徵,類的用途,針對你的特點正在找。但是,您將不得不加載應用程序中的所有類,這不是非常有效或實用。
如果你可以限制你的搜索到你的類的一小部分,那麼做這樣的事情可能會相當好。
不知道爲什麼你覺得你需要做這樣的事情,但是。這不是人們通常做的事情。這很奇怪。
你可以做這樣的事情
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);