SPL 函数
在线手册:中文  英文

class_uses

(PHP 5 >= 5.4.0)

class_uses Return the traits used by the given class

说明

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.

参数

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.

返回值

An array on success, or FALSE on error.

范例

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_uses('not_loaded'true));

?>

以上例程的输出类似于:

Array
(
    [foo] => foo
)

Array
(
    [foo] => foo
)

Array
(
    [trait_of_not_loaded] => trait_of_not_loaded
)

参见


SPL 函数
在线手册:中文  英文

用户评论:

adam at adamhahn dot com (2013-05-02 00:29:13)

This function can be used on traits as well as classes. Since traits 'use' other traits to create inheritance, this function allows you to get the parent trait(s) of another trait.

<?php

trait foo {
}

trait 
child {
  use 
foo;
}

print_r(class_uses('child')); // Outputs array containing 'foo'

?>

adam at adamhahn dot com (2013-04-30 23:34:51)

FYI: It is not explicitly stated, but if you run this function against a class that does not use any traits it will return an empty array.

<?php

class iDontUseTraits {
}

class_uses('iDontUseTraits'); // Returns empty array

?>

benkuhl at gmail dot com (2012-12-21 23:55:52)

[Edited by: googleguy at php dot net for clarity. It's obvious Xyz should have been Trait and not Class. ]

If your objective is to determine if a trait is being used by another class, you cannot use instanceOf...

<?php
Trait Xyz {

}
class 
Abc {
    use 
Xyz;
}


$abc = new Abc();

var_dump($abc instanceOf Xyz); // false
?>

You must use this function with either an in_array or array_key_exists...

<?php
var_dump
(array_key_exists('Xyz'class_uses($abc))); //true
?>

stealz at op dot pl (2012-12-01 10:20:58)

To get ALL traits including those used by parent classes and other traits, use this function:

<?php
function class_uses_deep($class$autoload true) {
    
$traits = [];
    do {
        
$traits array_merge(class_uses($class$autoload), $traits);
    } while(
$class get_parent_class($class));
    foreach (
$traits as $trait => $same) {
        
$traits array_merge(class_uses($trait$autoload), $traits);
    }
    return 
array_unique($traits);
}
?>

易百教程