2014-10-27 21 views

回答

0

好,反射封裝具有與性狀工作這些方法:

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

沒有「得到的所有類,使用特質X「方法。

如果你有一個你的代碼定義的所有類的列表,那麼你可以使用上面提到的方法之一(例如ReflectionClass::getTraits),然後比較特徵,類的用途,針對你的特點正在找。但是,您將不得不加載應用程序中的所有類,這不是非常有效或實用。

如果你可以限制你的搜索到你的類的一小部分,那麼做這樣的事情可能會相當好。

不知道爲什麼你覺得你需要做這樣的事情,但是。這不是人們通常做的事情。這很奇怪。

1

你可以做這樣的事情

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); 
相關問題