Sobes.tech
Junior

Wat zijn interfaces in PHP?

sobes.tech AI

Antwoord van AI

In PHP is een interface een contract dat een set methoden (met hun handtekeningen) beschrijft die een klasse moet implementeren. Het bepaalt "wat" de klasse doet, maar niet "hoe".

  • Contract: De klasse die de interface implementeert, verplicht zich alle in de interface beschreven methoden te bieden, met dezelfde namen, parameters en return types.
  • Type-erfenis: Interfaces maken het mogelijk om types te definiëren op basis van gedrag, niet alleen op basis van klassehiërarchie. Dit is handig voor polymorfisme. Je kunt werken met objecten van verschillende klassen die dezelfde interface implementeren, alsof ze van hetzelfde type zijn.
  • Meervoudige gedrag-erfenis: PHP ondersteunt geen meervoudige klasse-erfenis, maar een klasse kan meerdere interfaces implementeren. Dit stelt een klasse in staat om gedrag van meerdere contracten te hebben.
  • Verantwoordelijkheden scheiden: Interfaces helpen bij het scheiden van de definitie van gedrag en de implementatie ervan.
<?php

// Definities van de interface
interface Logger
{
    /**
     * Logt een bericht.
     * @param string $message Bericht om te loggen.
     */
    public function log(string $message): void;
}

// Klasse die de interface implementeert
class FileLogger implements Logger
{
    private string $filePath;

    public function __construct(string $filePath)
    {
        $this->filePath = $filePath;
    }

    public function log(string $message): void
    {
        file_put_contents($this->filePath, $message . PHP_EOL, FILE_APPEND);
    }
}

// Een andere klasse die dezelfde interface implementeert
class DatabaseLogger implements Logger
{
    private $dbConnection; // Er wordt een databaseverbinding object aangenomen

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

    public function log(string $message): void
    {
        // Logica voor opslaan in database
        // ...
        echo "Logging naar database: " . $message . PHP_EOL;
    }
}

// Gebruik van de interface om met verschillende implementaties te werken
function processData(Logger $logger, string $data): void
{
    // Gegevens verwerken
    // ...
    $logger->log("Verwerkte gegevens: " . $data);
}

$fileLogger = new FileLogger('/var/log/app.log');
$dbLogger = new DatabaseLogger(null); // Mock voor databaseverbinding

processData($fileLogger, 'Voorbeeldgegevens 1');
processData($dbLogger, 'Voorbeeldgegevens 2');

Belangrijkste verschillen met abstracte klassen:

Kenmerk Interface Abstracte klasse
Lidtypen Alleen methoden (moeten openbaar zijn) Methoden (openbaar, beschermd), eigenschappen
Implementatie van methoden Geen implementatie (alleen handtekeningen) Kan geïmplementeerde methoden bevatten
Erfenis Een klasse kan meerdere interfaces implementeren Een klasse kan slechts van één abstracte klasse erven
Constructor Niet aanwezig Kan een constructor hebben
Leden met zichtbaarheid Alleen public public, protected