Sobes.tech
Junior

Mi az az interfész a PHP-ben?

sobes.tech MI

Válasz az MI-től

A PHP felület egy szerződés, amely leírja az összes metódust (a szignatúráikkal), amelyeket egy osztálynak meg kell valósítania. Meghatározza, hogy "mit" csinál az osztály, de nem "hogyan".

  • Szerződés: Egy olyan osztály, amely megvalósítja a felületet, vállalja, hogy biztosítja az összes ebben leírt metódust, ugyanazokkal a nevekkel, paraméterekkel és visszatérési típusokkal.
  • Típusöröklés: A felületek lehetővé teszik a viselkedés alapján történő típusdefiniálást, nem csak az osztályhierarchiát. Ez hasznos a polimorfizmushoz. Különböző osztályok objektumaival dolgozhat, amelyek egy felületet valósítanak meg, mintha ugyanazon típusúak lennének.
  • Többszörös viselkedés öröklése: A PHP nem támogatja az osztályok többszörös öröklését, de egy osztály több felületet is megvalósíthat. Ez lehetővé teszi, hogy az osztály több szerződésből származó viselkedést örököljön.
  • Felelősségek szétválasztása: A felületek segítenek a viselkedés meghatározásának és megvalósításának szétválasztásában.
<?php

// Felület meghatározása
interface Logger
{
    /**
     * Naplóüzenet írása.
     * @param string $message Naplóüzenet.
     */
    public function log(string $message): void;
}

// Osztály, amely megvalósítja a felületet
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);
    }
}

// Egy másik osztály, amely megvalósítja ugyanazt a felületet
class DatabaseLogger implements Logger
{
    private $dbConnection; // Feltételezett adatbázis-kapcsolat objektum

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

    public function log(string $message): void
    {
        // Naplózás az adatbázisba
        // ...
        echo "Logging to database: " . $message . PHP_EOL;
    }
}

// A felület használata különböző megvalósításokkal
function processData(Logger $logger, string $data): void
{
    // Adatfeldolgozás
    // ...
    $logger->log("Processed data: " . $data);
}

$fileLogger = new FileLogger('/var/log/app.log');
$dbLogger = new DatabaseLogger(null); // Példa a kapcsolat szimulálására

processData($fileLogger, 'Példa adat 1');
processData($dbLogger, 'Példa adat 2');

A fő különbségek az absztrakt osztályokhoz képest:

Jellemző Felület Absztrakt osztály
Tagok típusa Csak metódusok (a metódusok nyilvánosak kell legyenek) Metódusok (nyilvános, védett), tulajdonságok
Metódusok megvalósítása Nincs megvalósítás (csak szignatúrák) Tartalmazhat megvalósított metódusokat
Öröklődés Egy osztály több felületet is megvalósíthat Egy osztály csak egy absztrakt osztályt örökölhet
Konstruktor Nem Lehet konstruktor
Tagok láthatósága Csak public public, protected