class_uses

(PHP 5 >= 5.4.0)

class_uses Retourne le trait utilisé par une classe donnée.

Description

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

Cette fonction retourne un tableau représentant les noms des traits que la classe donnée utilise. Les traits des classes parentes ne sont pas représentés.

Liste de paramètres

class

Un objet ou un nom de classe sous forme de chaine.

autoload

Si oui ou non l'auto-chargement __autoload() doit être déclenché.

Valeurs de retour

Un tableau en cas de succès, FALSE sinon.

Exemples

Exemple #1 Exemples pour 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';
}

// utilise __autoload pour charger la classe 'not_loaded'
print_r(class_uses('not_loaded'true));

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Array
(
    [foo] => foo
)

Array
(
    [foo] => foo
)

Array
(
    [trait_of_not_loaded] => trait_of_not_loaded
)

Voir aussi

add a note add a note

User Contributed Notes 3 notes

up
4
stealz at op dot pl
1 year 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
2
ulf
9 months 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
-1
adam at adamhahn dot com
11 months 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