Interfaces
Les interfaces objet permettent de cr�er du code qui sp�cifie quelles m�thodes une classe doit impl�menter.
Les interfaces sont d�finies en utilisant le mot-cl� interface, de la m�me fa�on qu'une classe standard mais sans aucun contenu de m�thode.
Toutes les m�thodes d�clar�es dans une interface doivent �tre publiques.
implements
Pour impl�menter une interface, l'op�rateur implements est utilis�. Toutes les m�thodes de l'interface doivent �tre impl�ment�es dans une classe ; si ce n'est pas le cas, une erreur fatale sera �mise. Les classes peuvent impl�menter plus d'une interface en s�parant chaque interface par une virgule.
Note: Une classe ne peut impl�menter deux interfaces qui partagent des noms de fonctions, puisque cela causerait une ambigu�t�.
Note: Les interfaces peuvent �tre �tendues comme des classes en utilisant l'op�rateur extend.
Les constantes
Les interfaces peuvent contenir des constantes. Les constantes d'interfaces fonctionnent exactement comme les constantes de classe. Elles ne peuvent pas �tre �cras�es par des classes ou des interfaces qui en h�ritent.
Exemples
Exemple #1 Exemple d'interface
<?php
// Declaration de l'interface 'iTemplate'
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
// Impl�mentation de l'interface
// Ceci va fonctionner
class Template implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
public function getHtml($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
return $template;
}
}
// Ceci ne fonctionnera pas
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
}
?>
Exemple #2 Les interfaces extensibles
<?php
interface a
{
public function foo();
}
interface b extends a
{
public function baz(Baz $baz);
}
// Ceci ne fonctionnera pas
class c implements b
{
public function foo()
{
}
public function baz(Baz $baz)
{
}
}
// Ceci ne fonctionnera pas et soul�vera une erreur fatale
class d implements b
{
public function foo()
{
}
public function baz(Foo $foo)
{
}
}
?>
Exemple #3 L'h�ritage de plusieurs interfaces
<?php
interface a
{
public function foo();
}
interface b
{
public function bar();
}
interface c extends a, b
{
public function baz();
}
class d implements c
{
public function foo()
{
}
public function bar()
{
}
public function baz()
{
}
}
?>
Exemple #4 Les interfaces avec des constantes
<?php
interface a
{
const b = 'Constante de l\'interface';
}
// Affiche: Constante de l'interface
echo a::b;
// Ceci ne fonctionnera pas de toutes fa�ons vu qu'il n'est pas autoris�
// d'�craser des constantes. C'est le m�me principe qu'avec les constantes
// de classe
class b implements a
{
const b = 'Constante de classe';
}
?>
Voir aussi l'op�rateur instanceof.