Classe abstrata PHP

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 abstractpalavra-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 abstractpalavra-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 Dumperque 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 Dumperclasse.

O seguinte define a WebDumperclasse que estende a Dumperclasse. Como a Dumperclasse possui o método abstrato dump(), a WebDumperclasse 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 WebDumperclasse 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, ConsoleDumperque estenda a Dumperclasse:

<?php

class ConsoleDumper extends Dumper
{
	public function dump($data)
	{
		var_dump($data);
	}
}Linguagem de código:  HTML, XML  ( xml )

O dump()método ConsoleDumperchama 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 DumperFactoryclasse que possui um método estático getDumper() .

O getDumper()método retorna um novo WebDumperobjeto se o script for executado no servidor web e ConsoleDumperum 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 DumperFactorypara 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *