Interface especifica os métodos que as classes, que usam a interface, deve implementar. Eles são definidos com a palavra-chave da interface seguido por um nome e um bloco de código. Sua nomenclatura deve começar com um pequeno “i” e, em seguida, fazer com que cada palavra a primeira letra maiúscula.

<?php
    interface iMyInterface {}
?>

Assinaturas das Interface

O bloco de código de uma interface pode conter assinaturas para métodos de instância. Estes métodos não pode ter implementações. Em vez disso, seus corpos são substituídos por ponto e vírgula. Métodos de interface devem sempre ser públicos.

<?php
interface iMyInterface
{
    public function myMethod();
}
?>

Além disso, as interfaces podem definir constantes. Essas constantes de interface se comportam exatamente como constantes de classe, exceto que eles não podem ser substituídos.

<?php
interface iMyInterface
{
    const PI = 3.14;
}
?>

Uma interface não pode herdar de uma classe, mas pode herdar de outra interface, que combina de forma eficaz as interfaces em um.

<?php
    interface i1 {}

    interface i2 extends i1 {}
?>

Exemplo de interface

O exemplo a seguir mostra uma interface chamada iComparable, que tem um único método chamado comparar. Note que este método faz uso da indicação de tipo para se certificar de que o método é chamado com o tipo correto. Esta funcionalidade será abordado em um artigo posterior.

<?php
interface iComparable
{
     public function compare(iComparable $o);
}
?>

A classe Circle implementa essa interface, usando a palavra-chave “implements” após o nome da classe, seguido do nome da interface. Se a classe também tem uma cláusula extends, a cláusula de implements precisa ser colocado depois. Tenha em mente que, apesar de uma classe só pode herdar de uma classe pai, é possível implementar qualquer número de interfaces, especificando-os em uma lista separada por vírgulas.

<?php
class Circle implements iComparable
{
    public $r;
}
?>

Devido Circle implementar iComparable deve-se definir o método compare(). Para esta classe o método irá retornar a diferença entre os raios de círculo. O método deve ser implementado público, além de ter a mesma assinatura como o método definido na interface. Também pode ter mais parâmetros, enquanto eles são opcionais.

<?php
class Circle implements iComparable
{
    public $r;
    public function compare(iComparable $o)
    {
        return $this->r - $o->r;
    }
}
?>

Usos da interface

Interfaces permitem herança múltipla no design de classe, sem as complicações associadas, permitindo herança múltipla funcional. A principal vantagem de exigir um projeto de classe específico pode ser visto com a interface iComparable, que define uma funcionalidade específica que as classes podem compartilhar. Ele permite aos desenvolvedores usar membros de interface sem ter que saber o tipo real de uma classe. Para ilustrar, o exemplo a seguir mostra um método simples que leva dois objetos iComparable e retorna o maior.

function largest(iComparable $a, iComparable $b)
{
    return ($a->compare($b) > 0) ? $a : $b;
}

Este método irá funcionar para quaisquer dois objetos do mesmo tipo que implementam a interface iComparable. Ele vai trabalhar, independentemente do tipo dos objetos são já que o método utiliza apenas a funcionalidade exposta através dessa interface.

Diretriz da interface

Uma interface fornece um projeto para uma classe sem qualquer implementação. É um contrato pelo qual as classes que implementam ele concorda em fornecer determinadas funcionalidades. Isto tem duas vantagens. Primeiro, ele fornece uma maneira de se certificar de que os desenvolvedores irão implementar certos métodos. Em segundo lugar, porque essas classes são a garantia de ter certos métodos, eles podem ser usados ​​mesmo sem saber tipo real da classe, o que permite um código mais flexível.

Links Importantes

http://php.net/manual/pt_BR/language.oop5.interfaces.php

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.