Entendendo o conceito de Interfaces no PHP
Bem aqui mostrarei para que serve uma Interface e como usar uma Interface.
Primeiro vamos a teoria e depois a pratica.
Uma Interface é como se fosse um contrato, caso a classe não siga aquele contrato ela é inválida.
Digamos que você queira criar 3 classes para 3 formulários diferentes onde cada classe vai ser um formulário.
Por padrão , todas as suas classes formularios tem que conter o mesmo método , por exemplo , o método gravar.
Para garantir que todas elas tenham esse método você usa uma interface.
Vamos implementar esse exemplo.
Interface usa a palavra interface no lugar da class.
Agora as Classes.
Para incluir uma interface se usa a palavra implements.
Como pode ver no código acima , o Formulario1 e Formulario2 está ok pois contem o método, porem , o Formulario3 não contem , o que ocorreria um erro, ou seja, o Formulario3 quebraria o contrato em que todos os formularios tem que conter um método public gravar.
Vamos destacar caracteristicas importantes:
1. Um método na interface não pode conter conteudo
2. Caso aja variaveis , estas devem ser exatas na interface e na classe que a implementa.
3. O método da interface tem que ser mais restrito ou igual a da classe
4. Constantes numa interface não podem ser mudadas na classe , pois , constantes são constantes ora! .
5. É possivel uma classe implementar mais de 1 interface ao mesmo tempo , sendo assim , a classe tem que estar nos padrões de todas as interfaces que ela implementa.
6. Uma interface pode herdar de várias outras Interfaces, sendo assim , a classe que implementa esta interface tem que estar nos padrões de todas as interfaces herdadas tambem.
Acho que é basicamente isso.
Para mim só existe vantagem em usar interfaces caso você tenha um projeto grande onde queira garantir que um grupo de classes siga um padrão de métodos ou algo do tipo.
No site oficial do php vocês encontraram mais exemplos de usos de interfaces.
Primeiro vamos a teoria e depois a pratica.
Uma Interface é como se fosse um contrato, caso a classe não siga aquele contrato ela é inválida.
Digamos que você queira criar 3 classes para 3 formulários diferentes onde cada classe vai ser um formulário.
Por padrão , todas as suas classes formularios tem que conter o mesmo método , por exemplo , o método gravar.
Para garantir que todas elas tenham esse método você usa uma interface.
Vamos implementar esse exemplo.
Interface usa a palavra interface no lugar da class.
interface InterfaceForm{ public function gravar(); }
Agora as Classes.
Para incluir uma interface se usa a palavra implements.
// Sucesso class Formulario1 implements InterfaceForm{ public function gravar(){ echo 'gravou'; } } // Sucesso class Formulario2 implements InterfaceForm{ public function gravar(){ echo 'gravou'; } public function retornar(){ echo 'retornar'; } } // Erro , pois classe não contem método gravar() class Formulario3 implements InterfaceForm{ public function retornar(){ echo 'retornar'; } }
Como pode ver no código acima , o Formulario1 e Formulario2 está ok pois contem o método, porem , o Formulario3 não contem , o que ocorreria um erro, ou seja, o Formulario3 quebraria o contrato em que todos os formularios tem que conter um método public gravar.
Vamos destacar caracteristicas importantes:
1. Um método na interface não pode conter conteudo
interface InterfaceForm{ // Erro , método não pode conter conteudo public function gravar(){ echo 'aqui'; } // Erro , mesmo só colocando {} , o espaço em branco é declarado como conteudo public function gravar(){} //Sucesso public function gravar(); }
2. Caso aja variaveis , estas devem ser exatas na interface e na classe que a implementa.
interface InterfaceForm{ public function gravar($mensagem); } class Formulario1 implements InterfaceForm{ public function gravar($mensagem){ echo $mensagem; } }
3. O método da interface tem que ser mais restrito ou igual a da classe
interface InterfaceForm{ public function gravar(); } // Erro , método protected é mais restrito que método public na interface class Formulario1 implements InterfaceForm{ protected function gravar(){ echo $mensagem; } }
4. Constantes numa interface não podem ser mudadas na classe , pois , constantes são constantes ora! .
interface InterfaceForm{ const a = 'Oi'; } // Erro , impossivel mudar valor de constante class Formulario1 implements InterfaceForm{ const a = 'Tchau'; }
5. É possivel uma classe implementar mais de 1 interface ao mesmo tempo , sendo assim , a classe tem que estar nos padrões de todas as interfaces que ela implementa.
interface A{ public functiom metodoA(); } interface B{ public functiom metodoB(); } class Formulario1 implements A,B{ public function metodoA(){} public function metodoB(){} }
6. Uma interface pode herdar de várias outras Interfaces, sendo assim , a classe que implementa esta interface tem que estar nos padrões de todas as interfaces herdadas tambem.
Interface A{} Interface B{} Interface C extends A,B{}
Acho que é basicamente isso.
Para mim só existe vantagem em usar interfaces caso você tenha um projeto grande onde queira garantir que um grupo de classes siga um padrão de métodos ou algo do tipo.
No site oficial do php vocês encontraram mais exemplos de usos de interfaces.
Ótimo post.
31/01/2018 12:02am
(~6 anos atrás)
No caso de interfaces em php não precisa colocar a notação @Override? Ou não existe isso em php?
30/07/2015 1:38pm
(~9 anos atrás)