Junior
Kas ir saskarnes PHP?
sobes.tech AI
Atbilde no AI
PHP saskarne ir līgums, kas apraksta metožu kopumu (ar to signaturām), kuras klasei jāievieš. Tas nosaka "ko" klase dara, bet ne "kā".
- Līgums: Klase, kas īsteno saskarni, apņemas nodrošināt visas šajā saskarnē aprakstītās metodes ar tiem pašiem nosaukumiem, parametriem un atgriešanas tipiem.
- Tipu mantošana: Saskarnes ļauj noteikt tipus pēc uzvedības, ne tikai klases hierarhijas. Tas ir noderīgi polimorfismam. Jūs varat strādāt ar dažādu klasu objektiem, kas īsteno vienu saskarni, it kā tie būtu viena tipa.
- Daudzveidīga uzvedības mantošana: PHP neatbalsta daudzveidīgu klases mantošanu, bet klase var īstenot vairākas saskarnes. Tas ļauj klasei iegūt uzvedību no vairākiem līgumiem.
- Atbildības sadalīšana: Saskarnes palīdz sadalīt uzvedības definīciju no tās īstenošanas.
<?php
// Saskarnes definīcija
interface Logger
{
/**
* Ieraksta žurnāla ziņojumu.
* @param string $message Ziņojums ierakstīšanai.
*/
public function log(string $message): void;
}
// Klase, kas īsteno saskarni
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);
}
}
// Cita klase, kas īsteno to pašu saskarni
class DatabaseLogger implements Logger
{
private $dbConnection; // Pieņemts, ka tas ir savienojuma objekts ar DB
public function __construct($dbConnection)
{
$this->dbConnection = $dbConnection;
}
public function log(string $message): void
{
// Logikas saglabāšana datu bāzē
// ...
echo "Žurnāls datu bāzē: " . $message . PHP_EOL;
}
}
// Saskarnes izmantošana ar dažādām īstenojumiem
function processData(Logger $logger, string $data): void
{
// Datu apstrāde
// ...
$logger->log("Apstrādāti dati: " . $data);
}
$fileLogger = new FileLogger('/var/log/app.log');
$dbLogger = new DatabaseLogger(null); // Piemēra mērķis ir savienojuma ar DB imitācija
processData($fileLogger, 'Datu piemērs 1');
processData($dbLogger, 'Datu piemērs 2');
Galvenās atšķirības no abstraktajiem klases:
| Raksturlielums | Saskarne | Abstrakta klase |
|---|---|---|
| Locekļu tips | Tikai metodes (jābūt publiskām) | Metodes (publiskas, aizsargātas), īpašības |
| Metožu īstenošana | Nav īstenošanas (tikai signatūras) | Var saturēt īstenotas metodes |
| Mantošana | Klase var īstenot vairākas saskarnes | Klase var manto tikai vienu abstraktu klasi |
| Konstruktoru | Nav | Var būt konstruktoru |
| Locekļi ar redzamības līmeni | Tikai public |
public, protected |