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 visibilidade
ou mais fraca. Por exemplo,
se um método abstrado é definido como protected, a implementação da função
deve ser definida ou como protected ou public.
Exemplo 19-17. 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.