2017-09-14 48 views
1

请注意,特质可能会使用其他特性,因此该类可能不会直接使用该特性。而且这个类也可以从父类中继承下来,后者就是使用这个特性的父类。如何检查一个类是否在PHP中使用特征?

这是一个问题,可以在几行内解决,否则我将不得不做一些循环?

+1

有一些函数会返回一个类(及其父母/等)在本页的注释中使用的所有特征:http://php.net/manual/en/function.class-uses .php – iainn

+0

@iainn。我认为ulf应该完成这项工作! – bijiDango

回答

2

class_uses()函数将返回一个数组,其中包含该类使用的所有特征的名称,并将通过传递一个类名或一个实例来工作....但是,您需要通过“递归”继承树得到使用的所有特性,并通过各性状以及

编辑

注意stealz at op dot pl提供了展示如何做到这一点递归在

链接PHP文档页面的评论部分的示例函数
+0

谢谢先生,今天我学到了一些新的+1 –

0

以下功能来自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); 
} 
相关问题