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'
?>
class_uses
(PHP 5 >= 5.4.0)
class_uses — Retourne le trait utilisé par une classe donnée.
Description
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
- class_parents() - Retourne la classe parente d'une classe
- get_declared_traits() - Retourne un tableau contenant tous les traits déclarés
adam at adamhahn dot com ¶
16 days ago
adam at adamhahn dot com ¶
17 days 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
?>
benkuhl at gmail dot com ¶
4 months ago
[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 ¶
5 months 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);
}
?>
