• Conceitos de P.O.O

Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Interface
  2. Declarando método
  3. Herança de interface
  4. Implementando método
  5. Herança múltipla
  6. extends + implements
  7. Verificando herança: class_implements

As interfaces em PHP são um tipo de dado abstrato para especificarmos comportamentos que uma classe deve seguir. As características de interfaces estão listadas abaixo.

Características
  1. Não possuem implementação
  2. Possuem apenas os protótipos de métodos
  3. Não possuem construtor
  4. Não podem ser instanciada
  5. Permite utilizar herança múltipla

A declaração de uma interface é feita utilizando a palavra reservada interface e seu corpo contém o protótipo dos métodos que devem ser posteriormente implementados pela classe que herdar a interface.

Sintaxe
interface nome_interface 
{
    //corpo omitido
}

O modificador de acesso public é o modificador padrão das interfaces que não têm seus modificadores informados.

Exemplo 1
<?php
public interface IInterface 
{
    //corpo omitido
}
?>

O corpo de uma interface deve conter apenas os protótipos/assinatura dos métodos que deverão ser implementados. É necessário informar o tipo de retorno, nome do método e seus argumentos.

Sintaxe
function nome_metodo();

function nome_metodo( <parametros> );

function nome_metodo( <parametros> ): tipo_retorno;
Exemplo 2
<?php
//IInterface.php
public interface IInterface 
{
   function metodo1();
   function metodo2(int $p);
   function metodo3(int $p): string;
}
?>
Saída
-

Os métodos que não possuem implementação são chamados de métodos abstratos. Esses, também são usados em classe abstrata que será vista mais adiante em POO: Classe Abstrata.

Como pode ser observado, os protótipos dos métodos contidos no corpo de uma interface não possuem nenhum tipo de modificador de acesso. Os modificadores são definidos no momento da implementação.

Para que seja possível o uso de uma interface, precisamos criar uma classe e informar que um determinada interface será utilizada. Isso é feito com o uso da palavra reservada implements.

Sintaxe
class nome_classe implements nome_interface 
{
  //corpo
}
Exemplo 3
<?php
//IInterface.php    
public interface IInterface 
{
   function metodo1();
   function metodo2(int $p);
   function metodo3(int $p): string;
}
//Classe.php
public class Classe implements IInterface
{
    //omitindo
}
?>
Saída
-

A implementação dos métodos de uma interface é feita normalmente com qualquer outro método já exemplificado.

Sintaxe
//classe omitida
modificador_acesso function nome_metodo( <lista_parametros> ): tipo_retorno 
{
    //corpo
}

Os nomes dos parâmetros utilizados não precisam coincidir com os das assinaturas dos métodos de uma interface. O importante é que tenham o mesmo tipo de dado.

Exemplo 4
<?php
//main.php
interface IInterface 
{
        function metodo1();
        function metodo2(int $p);
        function metodo3(int $p): string;
}

class Classe implements IInterface
{
    public function metodo1(){
        echo "metodo1","\n";
    }
        
    public function metodo2(int $p){
        echo "metodo2:$p","\n";
    }
        
    public function metodo3(int $p) : string {
        return "metodo3: $p";
    }
}
    
$classe = new Classe();
$classe->metodo1();
$classe->metodo2(999);
echo $classe->metodo3(888);
Saída
metodo1
metodo2:999
metodo3: 888

Com o uso de interface, podemos ter N classes herdando de uma mesma interface realizando as mesmas tarefas de forma diferente de acordo com suas necessidades.

Exemplo 5
<?php
//main.php
interface IInterface 
{
    function metodo3(int $p): string;
}

class Classe1 implements IInterface
{
    public function metodo3(int $p) : string {
        return "Classe1:metodo3: $p\n";
    }
}
    
class Classe2 implements IInterface
{
    public function metodo3(int $p) : string {
        return "Classe2:metodo3: $p\n";
    }
}
    
$classe1 = new Classe1();
echo $classe1->metodo3(111);
    
$classe2 = new Classe1();
echo $classe2->metodo3(222);
?>
Saída
Classe1:metodo3: 111
Classe1:metodo3: 222

A linguagem PHP possui suporte a herança múltipla de interfaces. Essa herança é feita de forma semelhante a herança vista anteriormente, exceto pelo fato de que podemos informar mais interfaces para herança.

Sintaxe
modificador_acesso nome_classe implements <lista_interfaces>
{
//corpo classe
}
Onde
<lista_interfaces>: interfaces separadas por (,)
Exemplo 6
<?php
interface IInterface1 {
        function metodo1();
}

interface IInterface2 {
        function metodo2(int $p);
}

class Classe1 implements IInterface1, IInterface2
{
    public function metodo1(){
        echo "metodo1","\n";
    }
        
    public function metodo2(int $p){
        echo "metodo2:$p","\n";
    }
}
        
$classe = new Classe1();
$classe->metodo1();
$classe->metodo2(111);
?>
Saída
metodo1
metodo2:111
  1. 26/08/2025 - revisão 3 - Ajustes: pontuais, objetivos, Exs. 4/5/6, target de links e sintaxes;
  2. 21/09/2024 - revisão 2 - ajustes gramaticais pontuais, sintaxes, exemplos
  3. 05/02/2024 - revisão 1 - correção em navegação e erros gramaticais
  4. 20/09/2023 - versão inicial