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

En PHP las interfaces permiten definir el comportamiento que una clase debe tener pero sin proveer la implementación de tal comportamiento. Esto también es llamado un contract: al implementar una interface la clase acepta los términos del contrato.

En Zend Framework 3 las interfaces son ampliamente usadas. Por ejemplo, la clase Application implementa la ApplicationInterface, de esta manera se definen los métodos que cada clase application debe proveer:

<?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 podemos ver en el ejemplo de arriba una interfaz es definida usando la palabra reservada interface casi de la misma manera como definimos una clase PHP estándar. Así como una clase usual las interfaces definen métodos. Sin embargo, la interfaz no provee ninguna implementación de sus métodos. En la interface ApplicationInterface definida arriba podemos ver que cada aplicación que implemente esta interfaz tendrá el método getServiceManager() para recuperar el Gestor de Servicios (el Gestor de Servicios lo revisaremos más adelante en este capítulo), los métodos getRequest() y getResponse() que respectivamente recuperan las peticiones y respuestas HTTP, y el método run() para ejecutar la aplicación.

En Zend Framework 3, por convención, las interfaces de clases deben incluir en su nombre el sufijo Interface por ejemplo ApplicationInterface.

La clase que implementa una interfaz se llama clase concreta. La clase concreta Application implementa la ApplicationInterface, lo que significa que provee la implementación de los métodos definidos por la 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...
    }
}

La clase concreta Application usa la palabra clave implements para mostrar que esta provee una implementación de todos los métodos de la interfaz ApplicationInterface. Además, la clase Application puede tener métodos adicionales que no están en la interfaz.

Gráficamente las relaciones entre las clases se muestran usando un diagrama de herencia. En la figura 3.1, se muestra el diagrama de la clase Application. La flecha apunta desde la clase hijo a la clase padre.

Figura 3.1. Diagrama de la clase Application Figura 3.1. Diagrama de la clase Application


Top