class_uses

(PHP 5 >= 5.4.0, PHP 7)

class_uses 指定したクラスが使っているトレイトを返す

説明

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

この関数は、指定したクラスが使っているトレイトの名前を配列で返します。 しかし、親クラスで使っているトレイトは含まれません。

パラメータ

class

オブジェクト (クラスのインスタンス) あるいは文字列 (クラス名)。

autoload

マジックメソッド __autoload() で、この関数からクラスを自動的に読み込ませるかどうか。

返り値

成功した場合に配列、エラー時には FALSE を返します。

例1 class_uses() の例

<?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';
}

// __autoload で 'not_loaded' クラスを読み込みます
print_r(class_uses('not_loaded'true));

?>

上の例の出力は、 たとえば以下のようになります。

Array
(
    [foo] => foo
)

Array
(
    [foo] => foo
)

Array
(
    [trait_of_not_loaded] => trait_of_not_loaded
)

参考

add a note add a note

User Contributed Notes 3 notes

up
17
stealz at op dot pl
5 years ago
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);
}
?>
up
13
ulf
4 years ago
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);
    }
?>
up
-30
adam at adamhahn dot com
4 years ago
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

?>
To Top