downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

iterator_apply> <class_parents
[edit] Last updated: Fri, 17 May 2013

view this page in

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



iterator_apply> <class_parents
[edit] Last updated: Fri, 17 May 2013
 
add a note add a note User Contributed Notes class_uses - [4 notes]
up
0
adam at adamhahn dot com
16 days ago
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'

?>
up
0
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

?>
up
0
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
?>
up
0
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);
}
?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites