Junior
PHPдеги интерфейстер эмне?
sobes.tech AI
AIден жооп
PHP-да интерфейс — бул келишим, ал описывает набор методов (с их сигнатурами), которые должен реализовать класс. Он определяет "что" делает класс, но не "как".
- Келишим: Класс, реализующий интерфейс, обязуется предоставить все методы, описанные в этом интерфейсе, с теми же именами, параметрами и типами возвращаемых значений.
- Типтердин мурас болушу: Интерфейстер мүмкүнчүлүк берет типтерди аныктоого негизделген жүрүм-турумга, ал гана класс хиерархиясына эмес. Бул полиморфизм үчүн пайдалуу. Сиз ар кандай класс объектилери менен иштей аласыз, алар бир интерфейсти ишке ашырат, алардын бири сыяктуу.
- Көптөгөн жүрүм-турум мурас болушу: PHP көптөгөн класс мурасын колдобойт, бирок класс көптөгөн интерфейстерди ишке ашыра алат. Бул класска бир нече келишимдерден жүрүм-турумду алууга мүмкүндүк берет.
- Жоопкерчиликтерди бөлүү: Интерфейстер жүрүм-турумдун аныктамасын анын ишке ашырылышынан бөлүүгө жардам берет.
<?php
// Интерфейс аныктоо
interface Logger
{
/**
* Логго билдирүү жазуу.
* @param string $message Жазуу үчүн билдирүү.
*/
public function log(string $message): void;
}
// Интерфейсти ишке ашырат турган класс
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);
}
}
// Башка класс, ошол эле интерфейсти ишке ашырат
class DatabaseLogger implements Logger
{
private $dbConnection; // Мүмкүн болгон байланыш объекти
public function __construct($dbConnection)
{
$this->dbConnection = $dbConnection;
}
public function log(string $message): void
{
// Базада сактоо логикасы
// ...
echo "Logging to database: " . $message . PHP_EOL;
}
}
// Интерфейсти колдонуу ар башка ишке ашырылыштар менен
function processData(Logger $logger, string $data): void
{
// Маалыматты иштетүү
// ...
$logger->log("Processed data: " . $data);
}
$fileLogger = new FileLogger('/var/log/app.log');
$dbLogger = new DatabaseLogger(null); // Мисал катары байланыш
processData($fileLogger, 'Мисал маалымат 1');
processData($dbLogger, 'Мисал маалымат 2');
Аябастык класстарга салыштырмалуу негизги айырмачылыктар:
| Өзгөчөлүк | Интерфейс | Аябастык класс |
|---|---|---|
| Мүчөлөрдүн түрү | Тек гана методдор (методдорду ачык болушу керек) | Методдор (ачык, корголгон), мүнөздөр |
| Методдорду ишке ашыруу | Ишке ашырылбайт (тек гана сигнатуралар) | Ишке ашырылган методдорду камтышы мүмкүн |
| Мурас алуу | Класс көп интерфейстерди ишке ашыра алат | Класс бир гана аябастык классты мурас кылышы мүмкүн |
| Конструктор | Жок | Мүмкүн болушу мүмкүн |
| Мүчөлөрдүн көрүнүшү | Тек гана public |
public, protected |