如何获取构成特征的特征列表

时间:2018-11-13 11:15:08

标签: php

问题:是否可以获取特征构成的特征列表?作为参考,我指的是traits composed from traits

方案::我有用于模型UserAccountLead的类。我具有称为PeopleImportableExportableValidatableImplicitAttributableAuditableListable,{{1} },PermitableSearchableEncryptableHashableCurrentableRelatable。所有这三个类都实现了Triggerable特性。

名为People的特征由PeopleAuditableListablePermitableSearchableEncryptableHashableCurrentableRelatable

我正在尝试按特征筛选班级。但是,当我尝试用特征Triggerable来过滤时,该特征未在其中一个模型中明确定义(相反,它是组合特征Searchable的一部分),没有任何结果。

当前使用的方法:

我尝试使用PHP的class_uses和以下功能:

People

生成要过滤的特征列表。我在列表中获得了function getTraitsForClass($class) { return array_keys((new \ReflectionClass($class))->getTraits()); } 特质,但没有得到People特质。

其他信息:

我正在使用Laravel 5.7和PHP 7.1.23构建应用程序。

1 个答案:

答案 0 :(得分:0)

事实证明,ReflectionClass也可以用于特质。所以我将功能修改为:

function getTraitsForClass($something)
{
    $traits = array_keys((new \ReflectionClass($something))->getTraits());
    foreach ($traits as $trait) {
        $traits = array_merge($traits, getTraitsForClass($trait));
    }
    $traits = array_unique($traits);
    return $traits;
}

我能够获得特征的完整列表。