Junior
O que são interfaces em PHP?
sobes.tech IA
Resposta da IA
A interface em PHP é um contrato que descreve um conjunto de métodos (com suas assinaturas) que uma classe deve implementar. Ela define "o que" a classe faz, mas não "como".
- Contrato: A classe que implementa a interface compromete-se a fornecer todos os métodos descritos nela, com os mesmos nomes, parâmetros e tipos de retorno.
- Herança de tipos: As interfaces permitem definir tipos com base no comportamento, e não apenas na hierarquia de classes. Isto é útil para o polimorfismo. Pode trabalhar com objetos de diferentes classes que implementam uma mesma interface, como se fossem do mesmo tipo.
- Herança múltipla de comportamento: PHP não suporta herança múltipla de classes, mas uma classe pode implementar múltiplas interfaces. Isto permite que uma classe tenha comportamentos de vários contratos.
- Separação de responsabilidades: As interfaces ajudam a separar a definição do comportamento da sua implementação.
<?php
// Definição da interface
interface Logger
{
/**
* Regista uma mensagem de log.
* @param string $message Mensagem a registar.
*/
public function log(string $message): void;
}
// Classe que implementa a interface
class FileLogger implements Logger
{
private string $filePath;
public function __construct(string $filePath)
{
$this->filePath = $filePath;
}
public function log(string $message): void
{
file_put_contents($this->filePath, $message . PHP_EOL, FILE_APPEND);
}
}
// Outra classe que implementa a mesma interface
class DatabaseLogger implements Logger
{
private $dbConnection; // Assume um objeto de conexão à base de dados
public function __construct($dbConnection)
{
$this->dbConnection = $dbConnection;
}
public function log(string $message): void
{
// Lógica para guardar na base de dados
// ...
echo "Registando na base de dados: " . $message . PHP_EOL;
}
}
// Uso da interface para trabalhar com diferentes implementações
function processData(Logger $logger, string $data): void
{
// Processamento de dados
// ...
$logger->log("Dados processados: " . $data);
}
$fileLogger = new FileLogger('/var/log/app.log');
$dbLogger = new DatabaseLogger(null); // Mock para exemplo de conexão à base de dados
processData($fileLogger, 'Exemplo de dados 1');
processData($dbLogger, 'Exemplo de dados 2');
Principais diferenças em relação às classes abstratas:
| Característica | Interface | Classe abstrata |
|---|---|---|
| Tipo de membros | Apenas métodos (devem ser públicos) | Métodos (públicos, protegidos), propriedades |
| Implementação de métodos | Sem implementação (apenas assinaturas) | Pode conter métodos implementados |
| Herança | Uma classe pode implementar múltiplas interfaces | Uma classe pode herdar apenas de uma classe abstrata |
| Construtor | Não possui | Pode ter um construtor |
| Membros com visibilidade | Apenas public |
public, protected |