ConFoo: Call for paper is now Open

class_uses

(PHP 5 >= 5.4.0)

class_uses Devolver los "traits" usados por la clase dada

Descripción

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

Esta función devuelve un array con los nombres de los "traits" que usa la class dada. Sin embargo, esto no incluye ningún "trait" usado por una clase padre.

Parámetros

class

Un objeto (instancia de clase) o una cadena (nombre de clase).

autoload

Si permitir a esta función cargar la clase automáticamente a través del método mágico __autoload().

Valores devueltos

Un array en caso de éxito, o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de class_uses()

<?php

trait foo { }
class 
bar {
  use 
foo;
}

print_r(class_uses(new bar));

print_r(class_uses('bar'));

function 
__autoload($nombre_clase) {
   require_once 
$nombre_clase '.php';
}

// use __autoload para cargar la clase 'no_cargada'
print_r(class_uses('no_cargada'true));
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [foo] => foo
)

Array
(
    [foo] => foo
)

Array
(
    [trait_of_not_loaded] => trait_of_not_loaded
)

Ver también

add a note add a note

User Contributed Notes 3 notes

up
5
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
4
ulf
1 year 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
-3
adam at adamhahn dot com
1 year 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