文字

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
)

参见

  • class_parents() - 返回指定类的父类。
  • get_declared_traits() - 返回所有已定义的 traits 的数组

用户评论:

[#1] ulf [2013-07-11 09:21:11]

A slighly modified version from Stealz that also checks all the "parent" traits used by the traits:

<?php
public static function class_uses_deep($class$autoload true)
    {
        
$traits = [];

        
// Get traits of all parent classes
        
do {
            
$traits array_merge(class_uses($class$autoload), $traits);
        } while (
$class get_parent_class($class));

        
// Get traits of all parent traits
        
$traitsToSearch $traits;
        while (!empty(
$traitsToSearch)) {
            
$newTraits class_uses(array_pop($traitsToSearch), $autoload);
            
$traits array_merge($newTraits$traits);
            
$traitsToSearch array_merge($newTraits$traitsToSearch);
        };

        foreach (
$traits as $trait => $same) {
            
$traits array_merge(class_uses($trait$autoload), $traits);
        }

        return 
array_unique($traits);
    }
?>

[#2] 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

?>

[#3] 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);
}
?>

上一篇: 下一篇: