Em PHP, interfaces permitem definir qual comportamento uma classe deve ter, mas sem fornecer a sua implementação.
Isto é também chamado contract (contrato) ao implementar uma interface, uma classe concorda em aceitar o termos do contrato.
No Zend Framework 3, as interfaces são amplamente usadas.
Por exemplo, a classe Application
implementa o ApplicationInterface
,
que define os métodos que cada classe de aplicativo deve fornecer:
<?php
namespace Zend\Mvc;
interface ApplicationInterface
{
// Retrieves the service manager.
public function getServiceManager();
// Retrieves the HTTP request object.
public function getRequest();
// Retrieves the HTTP response object.
public function getResponse();
// Runs the application.
public function run();
}
Como você pode ver no exemplo acima, uma interface é definida usando a palavra interface
,
quase da mesma maneira que você define uma classe no PHP. Como uma classe normal
a interface define métodos. No entanto, a interface não fornece não implementa nenhum
de seus métodos. Na definição da interface acima ApplicationInterface
, você pode
ver que a implementação desta interface terá o método getServiceManager()
para
trazer informações do service manager (sobre o service manager, vamos ver logo mais neste capítulo), o
métodos getRequest()
e getResponse()
para pegar o pedido HTTP e a resposta, respectivamente,
e o método run()
para executar o aplicativo.
No Zend Framework 3, por padrão, as interface devem ser nomeadas com o sufixo
Interface
, comoApplicationInterface
.
Uma classe que implementa uma interface é chamada de classe concrete (concreta).
A classe concreta Application
implementa o ApplicationInterface
, o que significa
que ele prover a implementação dos métodos definido pela interface:
<?php
namespace Zend\Mvc;
class Application implements ApplicationInterface
{
// Implement the interface's methods here
public function getServiceManager()
{
// Provide some implementation...
}
public function getRequest()
{
// Provide some implementation...
}
public function getResponse()
{
// Provide some implementation...
}
public function run()
{
// Provide some implementation...
}
}
A classe concreta Application
usa a palavra implements
para mostrar que
fornece uma implementação de todos os métodos da interface ApplicationInterface
.
A classe Application
também pode ter métodos adicionais, que não fazem parte
da interface.
Graficamente, as relações de classe são exibidas usando diagramas de herança.
Na imagem 3.1, o diagrama apresentado para o Application
. Onde a seta indica
classe pai e classe filho.