I made a slight mistake in my last note, the correct code is below.
Since traits can use other traits, the following function will recursively check if a class uses a trait anywhere in the trait hierarchy.
<?php
function class_uses_recursive( $class, $trait )
{
$traits = class_uses( $class );
while( !empty( $traits ))
{
foreach( $traits as $k => $t )
{
if( $t == $trait )
return true;
if( class_uses_recursive( $t, $trait ))
return true;
unset( $traits[ $k ] );
}
}
return false;
}
?>
class_uses
(No version information available, might only be in SVN)
class_uses — Return the traits used by the given class
Descrição
This function returns an array with the names of the traits that the given class uses. This does however not include any traits used by a parent class.
Parâmetros
- class
-
An object (class instance) or a string (class name).
- autoload
-
Whether to allow this function to load the class automatically through the __autoload() magic method.
Valor Retornado
An array on success, or FALSE on error.
Exemplos
Exemplo #1 class_uses() example
<?php
trait foo { }
class bar {
use foo;
}
print_r(class_uses(new bar));
print_r(class_uses('bar'));
function __autoload($class_name) {
require_once $class_name . '.php';
}
// use __autoload to load the 'not_loaded' class
print_r(class_implements('not_loaded', true));
?>
O exemplo acima irá imprimir algo similar a:
Array
(
[foo] => foo
)
Array
(
[foo] => foo
)
Array
(
[trait_of_not_loaded] => trait_of_not_loaded
)
Veja Também
- class_parents() - Retorna as classes pai de determinada classe
- get_declared_traits() - Returns an array of all declared traits
User Contributed Notes
class_uses
class_uses
josh at bitmagnet dot org
16-Apr-2012 04:46
16-Apr-2012 04:46
josh at bitmagnet dot org
16-Apr-2012 01:45
16-Apr-2012 01:45
Since traits can use other traits, the following function will recursively check if a class uses a trait anywhere in the trait hierarchy.
<?php
function class_uses_recursive( $class, $trait )
{
$traits = class_uses( $class );
while( !empty( $traits ))
{
foreach( $traits as $k => $t )
{
if( $t === $trait )
return true;
if( class_uses_recursive( $class, $t ))
return true;
unset( $traits[ $k ] );
}
}
return false;
}
?>

class_parents