Interfaces

Utilisation des interfaces pour définir des contrats en PHP.

Créé le 10 novembre 2025

Mis à jour le 10 novembre 2025

Introduction


Les interfaces d'objets permettent de créer du code qui spécifie quelles méthodes une classe doit implémenter, sans avoir à définir comment ces méthodes sont implémentées.

Les interfaces sont définies de la même façon qu'une classe, mais en utilisant le mot-clé interface à la place de class, et sans qu'aucune des méthodes n'ait son contenu spécifié.

Une interface est un contrat qui définit un ensemble de méthodes publiques qu'une classe doit implémenter. Contrairement aux classes abstraites, les interfaces ne peuvent pas contenir de logique d'implémentation, elles servent uniquement à définir la structure que les classes doivent suivre.

Les interfaces peuvent être étendues comme des classes, en utilisant l'opérateur extends. Une interface peut étendre une ou plusieurs autres interfaces, héritant ainsi de leurs méthodes.

Interface vs Classe abstraite


Une interface est comme un protocole ou un accord. Lorsqu'une classe dit "j'implémente l'interface Y", elle promet d'avoir les mêmes méthodes publiques que tout objet implémentant cette interface.

L'interface définit comment votre code communique avec n'importe quel objet l'implémentant.

Une classe abstraite est comme une classe partiellement construite, un document avec des espaces à remplir. Lorsqu'une classe dit "j'étends la classe abstraite Y", elle utilise des méthodes ou propriétés déjà définies dans cette autre classe.

En résumé : utilisez une interface pour définir un contrat de méthodes publiques, utilisez une classe abstraite pour partager du code réutilisable entre classes liées.

Exemples


<?php
interface Logger {
    public function log(string $message): void;
}

class FileLogger implements Logger {
    public function log(string $message): void {
        file_put_contents('app.log', $message . PHP_EOL, FILE_APPEND);
    }
}

$logger = new FileLogger();
$logger->log("This is a log message.");
<?php
interface Shape {
    public function area(): float;
    public function perimeter(): float;
}

class Circle implements Shape {
    private float $radius;

    public function __construct(float $radius) {
        $this->radius = $radius;
    }

    public function area(): float {
        return pi() * ($this->radius ** 2);
    }

    public function perimeter(): float {
        return 2 * pi() * $this->radius;
    }
}

$circle = new Circle(5);
echo "Area: " . $circle->area(); // Area: 78.539816339745
echo "Perimeter: " . $circle->perimeter(); // Perimeter: 31.415926535898

Constantes et propriétés


Propriétés


À partir de PHP 8.4, les interfaces peuvent également déclarer des propriétés. Si c'est le cas, la déclaration doit spécifier si la propriété est lisibile, modifiable ou les deux.

<?php
interface User {
    public string $name;
    public readonly int $id;
}

class Member implements User {
    public string $name;
    public readonly int $id;

    public function __construct(string $name, int $id) {
        $this->name = $name;
        $this->id = $id;
    }
}

$member = new Member("Alice", 1);
echo $member->name; // Alice
echo $member->id;   // 1

Constantes


Les interfaces peuvent contenir des constantes. Les constantes d'interfaces fonctionnent exactement comme les constantes de classe.

<?php
interface Status {
    public const ACTIVE = 'active';
    public const INACTIVE = 'inactive';
}

echo Status::ACTIVE; // active