请注意,特质可能会使用其他特性,因此该类可能不会直接使用该特性。而且这个类也可以从父类中继承下来,后者就是使用这个特性的父类。如何检查一个类是否在PHP中使用特征?
这是一个问题,可以在几行内解决,否则我将不得不做一些循环?
请注意,特质可能会使用其他特性,因此该类可能不会直接使用该特性。而且这个类也可以从父类中继承下来,后者就是使用这个特性的父类。如何检查一个类是否在PHP中使用特征?
这是一个问题,可以在几行内解决,否则我将不得不做一些循环?
class_uses()函数将返回一个数组,其中包含该类使用的所有特征的名称,并将通过传递一个类名或一个实例来工作....但是,您需要通过“递归”继承树得到使用的所有特性,并通过各性状以及
编辑
注意stealz at op dot pl
提供了展示如何做到这一点递归在
谢谢先生,今天我学到了一些新的+1 –
以下功能来自http://php.net/manual/en/function.class-uses.php,ulf的评论。完美的作品。
function class_uses_deep($class, $autoload = true)
{
$traits = [];
// Get traits of all parent classes
do {
$traits = array_merge(class_uses($class, $autoload), $traits);
} while ($class = get_parent_class($class));
// Get traits of all parent traits
$traitsToSearch = $traits;
while (!empty($traitsToSearch)) {
$newTraits = class_uses(array_pop($traitsToSearch), $autoload);
$traits = array_merge($newTraits, $traits);
$traitsToSearch = array_merge($newTraits, $traitsToSearch);
};
foreach ($traits as $trait => $same) {
$traits = array_merge(class_uses($trait, $autoload), $traits);
}
return array_unique($traits);
}
有一些函数会返回一个类(及其父母/等)在本页的注释中使用的所有特征:http://php.net/manual/en/function.class-uses .php – iainn
@iainn。我认为ulf应该完成这项工作! – bijiDango