PHP.mk документација

class_uses

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.class-uses.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.class-uses.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
class_uses

Референца за `function.class-uses.php` со подобрена типографија и навигација.

function.class-uses.php

class_uses

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

class_uses Враќа особини што ги користи дадената класа

= NULL

class_uses(object|string $object_or_class, bool $autoload = true): array|false

Оваа функција враќа низа со имињата на особините што ги користи дадената object_or_class ги користи. Ова сепак не вклучува никакви особини што ги користи родителска класа.

Параметри

object_or_class

Објект (инстанца на класа) или стринг (име на класа).

autoload

Дали да autoload ако веќе не е вчитан.

Вратени вредности

Низа при успех, или false кога дадената класа не постои.

Примери

Пример #1 class_uses() example

<?php

trait foo { }
class
bar {
use
foo;
}

print_r(class_uses(new bar));

print_r(class_uses('bar'));

spl_autoload_register();

// use autoloading to load the 'not_loaded' class
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() - Враќа низа од сите декларирани особини

Белешки од корисници 6 белешки

stealz at op dot pl
пред 13 години
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);
}
?>
Jos Macedo
пред 5 години
Another alternative to get all parent traits is:

<?php
function getUsedTraits($classInstance) {
    $parentClasses = class_parents($classInstance);
    $traits = class_uses($classInstance);
    
    foreach ($parentClasses as $parentClass) {
        $traits = array_merge($traits, class_uses($parentClass));
    }
    
    return $traits;
}
?>
ulf
12 години пред
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);
    }
?>
Thomas Mueller
пред 8 години
If the class does not exist, you will get a warning, even if $autoload == false; I.e., if the class is not found, setting $autoload to false is not sufficient to silence the warning.

This is different from class_exists ($class_name, $autoload = true), which doesn't generate a warning in either case.
Thomas Mueller
пред 8 години
I have improved on ulf's improvement of stealz' code. I'm pretty sure the last "foreach" adds nothing, so I've removed it, as well as adding a check for string class names (as opposed to objects) to prevent the warning if the class is not found:

<?php
function class_uses_deep($class, $autoload = true) {
  $traits = [];

  // Get all the traits of $class and its parent classes
  do {
    $class_name = is_object($class)? get_class($class): $class;
    if (class_exists($class_name, $autoload)) {
      $traits = array_merge(class_uses($class, $autoload), $traits);
    }
  } while ($class = get_parent_class($class));

  // Get traits of all parent traits
  $traits_to_search = $traits;
  while (!empty($traits_to_search)) {
    $new_traits = class_uses(array_pop($traits_to_search), $autoload);
    $traits = array_merge($new_traits, $traits);
    $traits_to_search = array_merge($new_traits, $traits_to_search);
  };

  return array_unique($traits);
}
donatj at gmail dot com
пред 5 години
The popular stealz solution doesn't handle traits that use other traits. A little bit of recursion can clean the entire thing up a bit and make it more robust.

<?php

public function class_uses_deep( string $class, bool $autoload = true ) : array {
    $traits = class_uses($class, $autoload);

    if($parent = get_parent_class($class)) {
        $traits = array_merge($traits, class_uses_deep($parent, $autoload));
    }

    foreach( $traits as $trait ) {
        $traits = array_merge($traits, class_uses_deep($trait, $autoload));
    }

    return $traits;
}

?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.