Junior
Mis on liidesed PHP-s?
sobes.tech AI
Vastus AI-lt
PHP-liides on leping, mis kirjeldab meetodite kogumi (ko signatuuridega), mida klass peab rakendama. See määratleb "mida" klass teeb, kuid mitte "kuidas".
- Leping: Klass, mis rakendab liidest, kohustub pakkuma kõiki selles kirjeldatud meetodeid sama nime, parameetrite ja tagastustüüpidega.
- Tüüpide pärimine: Liidesed võimaldavad määrata tüüpe käitumise põhjal, mitte ainult klasside hierarhia kaudu. See on kasulik polümorfismis. Saate töötada erinevate klasside objektidega, mis rakendavad ühte liidest, nagu nad oleksid sama tüüpi.
- Mitme käitumise pärimine: PHP ei toeta mitut pärandit klassidele, kuid klass võib rakendada mitut liidest. See võimaldab klassil omada käitumist mitmest lepingust.
- Vastutuse jagamine: Liidesed aitavad jagada käitumise määratlemist selle rakendusest.
<?php
// Liidese määratlus
interface Logger
{
/**
* Kirjutab logi sõnumi.
* @param string $message Sõnum kirjutamiseks.
*/
public function log(string $message): void;
}
// Klass, mis rakendab liidest
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);
}
}
// Teine klass, mis rakendab sama liidest
class DatabaseLogger implements Logger
{
private $dbConnection; // Eeldatakse, et see on ühendusobjekt andmebaasiga
public function __construct($dbConnection)
{
$this->dbConnection = $dbConnection;
}
public function log(string $message): void
{
// Logika andmebaasi salvestamiseks
// ...
echo "Logimine andmebaasi: " . $message . PHP_EOL;
}
}
// Liidese kasutamine erinevate rakendustega
function processData(Logger $logger, string $data): void
{
// Andmete töötlemine
// ...
$logger->log("Töödeldud andmed: " . $data);
}
$fileLogger = new FileLogger('/var/log/app.log');
$dbLogger = new DatabaseLogger(null); // Näidissõnum ühendusest andmebaasiga
processData($fileLogger, 'Näidisandmed 1');
processData($dbLogger, 'Näidisandmed 2');
Peamised erinevused abstraktsete klasside suhtes:
| Omadus | Liides | Abstraktne klass |
|---|---|---|
| Liik liikmetest | Ainult meetodid (peavad olema avalikud) | Meetodid (avalikud, kaitstud), omadused |
| Meetodite rakendamine | Ei ole rakendust (ainult signatuurid) | Võib sisaldada rakendatud meetodeid |
| Pärimine | Klass võib rakendada mitut liidest | Klass võib pärida ainult ühe abstraktse klassi |
| Konstruktor | Ei ole | Võib omada konstruktorit |
| Liikmed nähtavus | Ainult public |
public, protected |