PHPCon Poland 2024

class_implements

(PHP 5, PHP 7, PHP 8)

class_implements Retorna as interfaces que são implementadas pela classe ou interface fornecida

Descrição

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

Esta função retorna um array com os nomes das interfaces que o object_or_class fornecido e seus pais implementam.

Parâmetros

object_or_class

Um objeto (instância de classe) ou uma string (nome da classe ou interface).

autoload

Se deve ou não carregar automaticamente se ainda não estiver carregado.

Valor Retornado

Um array em caso de sucesso, ou false quando a classe fornecida não existe.

Exemplos

Exemplo #1 Exemplo de class_implements()

<?php

interface foo { }
class
bar implements foo {}

print_r(class_implements(new bar));

// você também pode especificar o parâmetro como uma string
print_r(class_implements('bar'));

spl_autoload_register();

// use o carregamento automático para carregar a classe 'not_loaded'
print_r(class_implements('not_loaded', true));

?>

O exemplo acima produzirá algo semelhante a:

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

Notas

Nota: Para verificar se um objeto implementa uma interface, use instanceof ou a função is_a() em vez disso.

Veja Também

add a note

User Contributed Notes 4 notes

up
16
ludvig dot ericson at gmail dot nospam dot com
18 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
10
a dot panek at brainsware dot org
10 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
3
trollll23 at yahoo dot com
18 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
)
up
-12
sam at rmcreative dot ru
5 years ago
The order of interfaces is not reliable and varies between PHP versions.
To Top