• Conceitos de P.O.O

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

  1. Entender classe abstrata e sua declaração
  2. Declarando atributos
  3. Declarando métodos
  4. Herança de Classe abstrata
  5. Implementando métodos de classe abstrata
  6. Herança múltipla
  7. Sobrescrita de métodos
  8. Modificadores de acesso

Outra forma, além do uso de interface, de aplicar a abstração utilizando a linguagem PHP, é com auxiliar de classe abstrata.

Interfaces não possuem implementação, em contrapartida classes concretas possuem implementação. Uma classe abstrata é a junção das características de interface e classe concreta permitindo métodos concretos e também abstratos serem implementados.

Características
  1. Possue implementação
  2. Possue métodos concretos e abstratos
  3. Não possue construtor
  4. Não pode ser instanciada

A declaração de uma classe abstrata é feita como qualquer classe, exceto pelo do uso do modificador de restrição abstract como pode ser visto abaixo:

Sintaxe
abstract class nome_classe 
{
 //corpo
}

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

Exemplo 1
<?php
//Ateste.php
abstract class ATeste 
{
    //omitido
}
?>

A declaração de atributos em classes abstratas é feita da mesma forma em que são feitas classes concretas. O acesso aos atributos é feito de acordo com os modificadores de acessos:

Exemplo 2
<?php
//ATeste.php
abstract class ATeste 
{
    private $a;
    public $b;
    protected $c;
    public static $d;
}
?>
Saída
-

Como já mencionado, as classes abstratas podem conter métodos com implementação, concertos, e sem implementação. Os métodos sem implementação são chamados de métodos abstratos.

O acesso aos métodos concretos é feito de acordo com os modificadores de acessos utilizados.

Sintaxe: abstrato
modificador_acesso abstract function nome_metodo( <lista_parametros> ) : tipo_retorno;
Sintaxe: concreto
modificador_acesso abstract function nome_metodo( <lista_parametros> ) : tipo_retorno
{
    //implementação omitida
    return valor;
};
Exemplo 3
<?php
//main.php
abstract class AClasse 
{
    abstract public function metodo1(); //abstrato
        
    public function metodo2() //concreto
    {
        echo "metodo2","\n";
    }
}
?>

Diferente dos protótipos de métodos definidos em interfaces, os métodos abstratos quando definidos em classes abstratas devem conter modificador abstract. Além disso, também possibilitam o uso dos modificadores de acesso(Exceto private) com métodos de classes concretas.

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

Sintaxe
class nome_classe extends nome_classe_abstrata
{
  //corpo
}
Exemplo 4
<?php
//main.php
abstract class AClasse 
{
    abstract public function metodo1(); //abstrato
        
    public function metodo2() //concreto
    {
        echo "metodo2","\n";
    }
}
class Classe1 extends AClasse
{
    //corpo omitido
}
?>
Saída
-

A implementação dos métodos de uma classe é feita normalmente de forma semelhante a implementação de métodos de interface visto em POO: Interface.

Sintaxe
class nome_classe extends nome_classe_abstrata
{
    modificador_acesso function nome_metodo_abstrato(<lista_parametros>): tipo_retorno 
    {
        //implementação
    }
}

Os nomes dos parâmetros utilizados pelos métodos implementados não precisam necessariamente coincidir com os nomes declarados na assinatura dos métodos abstratos. O importante é que tenham o mesmo tipo de dado.

Exemplo 5
<?php
//main.php
abstract class AClasse 
{
    //omitido
    abstract public function metodo1();
        
    public function metodo2(){
        echo "metodo2","\n";
    }
}
class Classe1 extends AClasse
{
    public function metodo1()
    {
        echo "metodo1","\n";
    }
}

$obj = new Classe1();
$obj->metodo1();
$obj->metodo2();
?>
Saída
metodo1
metodo2

A linguagem PHP possui suporte a herança múltipla de classe abstrata em conjunto com interfaces. Essa herança é feita de forma semelhante a herança vista anteriormente, porém, podemos utilizar N interfaces, mas apenas uma classe abstrata.

Na sintaxe abaixo, utilizamos as palavras reservadas extends e implements "combinadas" para mostrar a herança múltipla explicada acima:

Sintaxe
class nome_classe extends classe_abstrata implements <lista_interfaces>
{
    //corpo classe
}
Exemplo 6
<?php
//main.php
abstract class AClasse 
{
    //omitido
    abstract public function metodo1();
        
    public function metodo2(){
        echo "metodo2","\n";
    }
}
    
interface IClasse 
{
    function metodo3();
}

class Classe1 extends AClasse implements IClasse
{
    public function metodo1()
    {
        echo "metodo1","\n";
    }
    
    public function metodo3()
    {
        echo "metodo3","\n";
    }
}
$obj = new Classe1();
$obj->metodo1();
$obj->metodo2();
$obj->metodo3();
?>
Saída
metodo1
metodo2
metodo3
  1. 26/08/2025 - revisão 3 - Ajustes: pontuais, objetivos, Ex. 3, target de links e sintaxes;
  2. 21/09/2024 - revisão 2 - remoção de sintaxe/Ex. 3, ajustes gramaticais, exemplos/sintaxes, outros ajustes
  3. 05/02/2024 - revisão 1 - correção em navegação e erros gramaticais
  4. 20/09/2023 - versão inicial