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
(PHP 5 >= 5.4.0)
class_uses — Return the traits used by the given class
Description
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.
Parameters
-
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.
Return Values
An array on success, or FALSE on error.
Examples
Example #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));
?>
The above example will output something similar to:
Array
(
[foo] => foo
)
Array
(
[foo] => foo
)
Array
(
[trait_of_not_loaded] => trait_of_not_loaded
)
See Also
- class_parents() - Return the parent classes of the given class
- get_declared_traits() - Returns an array of all declared traits
josh at bitmagnet dot org
16-Apr-2012 07:46
josh at bitmagnet dot org
16-Apr-2012 04: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;
}
?>
