Resumo : neste tutorial, você aprenderá como usar a classe abstrata PHP para definir uma interface para outras classes estenderem.
Introdução à classe abstrata PHP
Uma classe abstrata é uma classe que não pode ser instanciada. Normalmente, um resumo define uma interface para outras classes estenderem.
Para definir uma classe abstrata, adicione a abstract
palavra-chave da seguinte forma:
<?php
abstract class className
{
// ...
}
Linguagem de código: HTML, XML ( xml )
Uma classe abstrata pode ter propriedades e métodos como uma classe regular. Mas não pode ser instanciado.
Semelhante a uma classe abstrata, um método abstrato é um método que não possui implementação. Para definir um método abstrato, você também usa a abstract
palavra-chave antes da assinatura do método como esta
abstract function methodName(arguments);
Linguagem de código: PHP ( php )
Na maioria dos casos, uma classe abstrata conterá pelo menos um método abstrato, embora não seja obrigatório. Se uma classe contém um ou mais métodos abstratos, ela deve ser uma classe abstrata.
Se uma classe estende uma classe abstrata, ela deve implementar todos os métodos abstratos ou ser declarada abstrata.
Exemplo de classe abstrata PHP
O exemplo a seguir define uma classe abstrata chamada Dumper
que possui um método abstrato dump()
:
<?php
abstract class Dumper
{
abstract public function dump($data);
}
Linguagem de código: HTML, XML ( xml )
Para despejar informações na web, você pode estender a Dumper
classe.
O seguinte define a WebDumper
classe que estende a Dumper
classe. Como a Dumper
classe possui o método abstrato dump(), a WebDumper
classe precisa implementar o dump()
método:
<?php
abstract class Dumper
{
abstract public function dump($data);
}
class WebDumper extends Dumper
{
public function dump($data)
{
echo '<pre>';
var_dump($data);
echo '</pre>';
}
}
Linguagem de código: HTML, XML ( xml )
O seguinte cria uma nova instância da WebDumper
classe e chama o dump()
método:
$webDumper = new WebDumper();
$webDumper->dump('PHP abstract class is awesome!');
Linguagem de código: PHP ( php )
Se você abrir o navegador da web, verá que a mensagem está dentro de uma tag <pre>:
string(30) "PHP abstract class is awesome!"
Linguagem de código: JavaScript ( javascript )
Posteriormente, se você quiser despejar as informações na linha de comando, poderá definir uma classe, por exemplo, ConsoleDumper
que estenda a Dumper
classe:
<?php
class ConsoleDumper extends Dumper
{
public function dump($data)
{
var_dump($data);
}
}
Linguagem de código: HTML, XML ( xml )
O dump()
método ConsoleDumper
chama a var_dump()
função para despejar as informações na linha de comando.
Este diagrama UML ilustra o relacionamento entre as classes Dumper, WebDumper e ConsoleDumper:
O seguinte define uma DumperFactory
classe que possui um método estático getDumper()
.
O getDumper()
método retorna um novo WebDumper
objeto se o script for executado no servidor web e ConsoleDumper
um objeto se o script for executado na linha de comando:
class DumperFactory
{
public static function getDumper()
{
return PHP_SAPI === 'cli'
? new ConsoleDumper()
: new WebDumper();
}
}
Linguagem de código: PHP ( php )
O seguinte usa o DumperFactory
para obter um Dumper com base em onde o script é executado e mostrar uma mensagem:
$dumper = DumperFactory::getDumper();
$dumper->dump('PHP abstract class is awesome!');
Linguagem de código: PHP ( php )
Se você executar o script no navegador da web, verá a seguinte mensagem bem envolvida em uma tag <pre>:
string(30) "PHP abstract class is awesome!"
Linguagem de código: JavaScript ( javascript )
No entanto, se você executar o script usando PHP CLI, verá apenas a mensagem sem a <pre>
tag.
Junte tudo:
<?php
abstract class Dumper
{
abstract public function dump($data);
}
class WebDumper extends Dumper
{
public function dump($data)
{
echo '<pre>';
var_dump($data);
echo '</pre>';
}
}
class ConsoleDumper extends Dumper
{
public function dump($data)
{
var_dump($data);
}
}
class DumperFactory
{
public static function getDumper()
{
return PHP_SAPI === 'cli'
? new ConsoleDumper()
: new WebDumper();
}
}
$dumper = DumperFactory::getDumper();
$dumper->dump('PHP abstract class is awesome!');
Linguagem de código: HTML, XML ( xml )
Resumo
- Uma classe abstrata não pode ser instanciada. Ele fornece uma interface para extensão de outras classes.
- Um método abstrato não possui implementação. Se uma classe contém um ou mais métodos abstratos, ela deve ser uma classe abstrata.
- Uma classe que estende uma classe abstrata precisa implementar os métodos abstratos da classe abstrata.