downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

iterator_apply> <class_parents
[edit] Last updated: Fri, 18 May 2012

view this page in

class_uses

(PHP 5 >= 5.4.0)

class_uses Return the traits used by the given class

Description

array class_uses ( mixed $class [, bool $autoload = true ] )

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



add a note add a note User Contributed Notes class_uses
josh at bitmagnet dot org 16-Apr-2012 07:46
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;
}
?>
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;
}
?>

 
show source | credits | sitemap | contact | advertising | mirror sites