En PHP, les interfaces vous permettent de définir quel comportement doit avoir une classe mais sans fournir l'implémentation d'un tel comportement. C'est ce qu'on appelle un contrat : en implémentant une interface, une classe accepte les termes du contrat.
Dans Zend Framework 3, les interfaces sont largement utilisées. Par exemple, la classe Application
implémente ApplicationInterface
qui définit les méthodes que chaque classe d'application doit fournir :
<?php
namespace Zend\Mvc;
interface ApplicationInterface
{
// Récupère le gestionnaire de service.
public function getServiceManager();
// Récupère l'objet de requête HTTP.
public function getRequest();
// Récupère l'objet de réponse HTTP.
public function getResponse();
// Exécute l'application.
public function run();
}
Comme vous pouvez le voir dans l'exemple ci-dessus, une interface est définie à l'aide du mot-clé interface
,
de la même manière que vous définissez une classe PHP standard. En tant que classe habituelle,
l'interface définit des méthodes. Cependant, l'interface ne fournit aucune implémentation de ses méthodes.
Dans la définition de l'interface ApplicationInterface
ci-dessus, vous pouvez voir que chaque
application implémentant cette interface aura la méthode getServiceManager()
pour récupérer le gestionnaire
de service (dont nous parlerons plus tard), les méthodes getRequest()
et getResponse()
pour récupérer
la requête et la réponse HTTP et la méthode run()
pour exécuter l'application.
Dans Zend Framework 3, par convention, les classes d'interface doivent être nommées avec le suffixe
Interface
, commeApplicationInterface
.
Une classe implémentant une interface est appelée une classe concrète. La classe concrète Application
implémente ApplicationInterface
, ce qui signifie qu'elle fournit l'implémentation des méthodes définies
par l'interface :
<?php
namespace Zend\Mvc;
class Application implements ApplicationInterface
{
// Implémentation des méthodes de l'interface :
public function getServiceManager()
{
// Fournis une implémentation ...
}
public function getRequest()
{
// Fournis une implémentation ...
}
public function getResponse()
{
// Fournis une implémentation ...
}
public function run()
{
// Fournis une implémentation ...
}
}
La classe concrete Application
utilise le mot clé implements
pour montrer qu'elle fournit une
implémentation de toutes les méthodes de l'interface ApplicationInterface
.
La classe Application
peut également avoir des méthodes supplémentaires, qui ne font pas partie de
l'interface.
Graphiquement, les relations de classe sont affichées en utilisant le diagramme d'héritage.
Dans la figure 3.1, le diagramme de la classe Application
est présenté. La flèche pointe
de la classe enfant à la classe parent.