class_uses

(PHP 5 >= 5.4.0)

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() - Returns an array of all declared traits

Коментарии

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);
}
?>
2012-12-01 12:20:58
http://php5.kiev.ua/manual/ru/function.class-uses.html
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

?>
2013-05-01 02:34:51
http://php5.kiev.ua/manual/ru/function.class-uses.html
Автор:
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);
    }
?>
2013-07-11 12:21:11
http://php5.kiev.ua/manual/ru/function.class-uses.html

    Поддержать сайт на родительском проекте КГБ