class_implements

(PHP 5, PHP 7, PHP 8)

class_implements Возвращает список интерфейсов, которые реализовал класс или унаследовал интерфейс

Описание

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

Функция возвращает массив с названиями интерфейсов, которые реализует объект или класс object_or_class и его родители.

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

object_or_class

Экземпляр класса или строка с названием класса или интерфейса.

autoload

Требуется ли автозагрузка класса, если PHP ещё не загрузил класс.

Возвращаемые значения

Функция возвращает массив, если выполнилась успешно, или false, если класс не определили или не загрузили в текущую область видимости.

Примеры

Пример #1 Пример получения списка интерфейсов функцией class_implements()

<?php

interface Foo {}
class
Bar implements Foo {}

print_r(class_implements(new Bar()));

// Возможно также указать параметр как строку
print_r(class_implements('Bar'));


spl_autoload_register();

// Автозагрузка класса 'NotLoaded'
print_r(class_implements('NotLoaded', true));

?>

Вывод приведённого примера будет похож на:

Array
(
    [foo] => foo
)
Array
(
    [foo] => foo
)
Array
(
    [interface_of_NotLoaded] => interface_of_NotLoaded
)

Примечания

Замечание: Реализует ли класс объекта конкретный интерфейс, проверяют оператором instanceof или вызывают функцию is_a().

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

  • class_parents() - Возвращает список родительских классов заданного класса
  • get_declared_interfaces() - Возвращает массив объявленных интерфейсов
  • is_a() - Проверяет, принадлежит ли объект типу или подтипу
  • instanceof

Добавить

Примечания пользователей 3 notes

up
16
ludvig dot ericson at gmail dot nospam dot com
19 years ago
Hint:
<?php
in_array
("your-interface", class_implements($object_or_class_name));
?>
would check if 'your-interface' is ONE of the implemented interfaces.
Note that you can use something similar to be sure the class only implements that, (whyever you would want that?)
<?php
array("your-interface") == class_implements($object_or_class_name);
?>

I use the first technique to check if a module has the correct interface implemented, or else it throws an exception.
up
12
a dot panek at brainsware dot org
11 years ago
Calling class_implements with a non-loadable class name or a non-object results in a warning:

<?php
// Warning: class_implements(): Class abc does not exist and could not be loaded in /home/a.panek/Projects/sauce/lib/Sauce/functions.php on line 196

$interfaces = class_implements('abc');
?>

This is not documented and should just return FALSE as the documentation above says.
up
2
trollll23 at yahoo dot com
19 years ago
Luckily, it prints out superinterfaces as well in reverse order so iterative searching works fine:

<?php

interface InterfaceA { }

interface
InterfaceB extends InterfaceA { }

class
MyClass implements InterfaceB { }

print_r(class_implements(new MyClass()));

?>

prints out:

Array
(
[InterfaceB] => InterfaceB
[InterfaceA] => InterfaceA
)
To Top