A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

3.3. Interfaces PHP

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, como ApplicationInterface.

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.

Imagem 3.1. Diagrama de Classes da Aplicação Imagem 3.1. Diagrama de Classes da Aplicação


Top