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 
extends a
{
    public function 
baz(Baz $baz);
}

// Ceci ne fonctionnera pas
class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Baz $baz)
    {
    }
}

// Ceci ne fonctionnera pas et soul�vera une erreur fatale
class 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 
extends ab
{
    public function 
baz();
}

class 
implements c
{
    public function 
foo()
    {
    }

    public function 
bar()
    {
    }

    public function 
baz()
    {
    }
}
?>

Exemple #4 Les interfaces avec des constantes

<?php
interface a
{
    const 
'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 implements a
{
    const 
'Constante de classe';
}
?>

Voir aussi l'op�rateur instanceof.