Forum und email

Abstração de Objetos

PHP 5 introduz métodos e classes abstratos. Não é permitido criar uma instância de uma class que foi definida como abstrata. Qualquer classe que contém pelo menos um método abstrato deve também ser abstrata. Métodos definidos como abstratos simplesmente declaram a assinatura do método, eles não podem definir a implementação.

Quando uma classe herda uma classe abstrata, todos os métodos marcados como abstratos na declaração da classe-pai devem ser definidos na classe filha; além disso, esses métodos devem ser definidos com a mesma (ou menos restrita) visibilidade. Por exemplo, se um método abstrado é definido como protected, a implementação da função deve ser definida ou como protected ou public, mas não private.

Example#1 Exemplo de classe abstrata

<?php
abstract class ClasseAbstrata
{
    
// Força a classe que extende (a subclasse) a definir esse método
    
abstract protected function pegarValor();
    abstract protected function 
valorComPrefixo$prefixo );

    
// Método comum
    
public function imprimir() {
        print 
$this->pegarValor();
    }
}

class 
ClasseConcreta1 extends ClasseAbstrata
{
    protected function 
pegarValor() {
        return 
"ClasseConcreta1";
    }

    public function 
valorComPrefixo$prefixo ) {
        return 
"{$prefixo}ClasseConcreta1";
    }
}

class 
ClasseConcreta2 extends ClasseAbstrata
{
    protected function 
pegarValor() {
        return 
"ClasseConcreta2";
    }

    public function 
valorComPrefixo$prefixo ) {
        return 
"{$prefixo}ClasseConcreta2";
    }
}

$classe1 = new ClasseConcreta1;
$classe1->imprimir();
echo 
$classe1->valorComPrefixo('FOO_') ."\n";

$classe2 = new ClasseConcreta2;
$classe2->imprimir();
echo 
$classe2->valorComPrefixo('FOO_') ."\n";
?>

O exemplo acima irá imprimir:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

Código antigo que não tem classes ou funções definidas pelo usuário como 'abstract' deve ser executado sem modificações.