ScotlandPHP

class_uses

(PHP 5 >= 5.4.0, PHP 7)

class_uses Возвращает список трэйтов, используемых заданным классом

Описание

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

Эта функция возвращает массив с именами трэйтов, которые использует заданный класс class. В этот массив, однако, не попадут трэйты, используемые в классах-родителях.

Список параметров

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
)

Смотрите также

  • class_parents() - Возвращает список родительских классов заданного класса
  • get_declared_traits() - Возвращает массив со всеми объявленными трейтами

add a note add a note

User Contributed Notes 3 notes

up
13
stealz at op dot pl
4 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
11
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
-27
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