Junior
PHP'da interfeyslar nima?
sobes.tech AI
AIdan javob
PHP'da interfeys, sinfning bajaradigan metodlar to'plamini (ularning imzolari bilan) tavsiflovchi shartnomadir. U "nima" qilayotganini aniqlaydi, lekin "qanday" emas.
- Shartnoma: Interfeysni amalga oshiradigan sinf, unda tavsiflangan barcha metodlarni, ayni nomlar, parametrlar va qaytish turlari bilan taqdim etishga majbur.
- Turlar merosxo'rligi: Interfeyslar xulq-atvor asosida turlarni belgilashga imkon beradi, faqat sinf merosxo'rligidan emas. Bu polimorfizm uchun foydalidir. Siz bir xil interfeysni amalga oshiradigan turli sinflarning ob'ektlari bilan ishlashingiz mumkin, ular bir xil turdek bo'lib.
- Ko'p merosxo'rlik: PHP sinflarning ko'p merosxo'rligini qo'llab-quvvatlamaydi, lekin bir sinf bir nechta interfeyslarni amalga oshirishi mumkin. Bu sinfga bir nechta shartnomalardan xulq-atvorlarni olish imkonini beradi.
- Mas'uliyatlarni ajratish: Interfeyslar xulq-atvor ta'rifini uning amalga oshirilishidan ajratishga yordam beradi.
<?php
// Interfeys ta'rifi
interface Logger
{
/**
* Log xabarini yozadi.
* @param string $message Yoziladigan xabar.
*/
public function log(string $message): void;
}
// Interfeysni amalga oshiradigan sinf
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);
}
}
// Boshqa sinf, shuningdek, ushbu interfejsni amalga oshiradi
class DatabaseLogger implements Logger
{
private $dbConnection; // Ma'lumotlar bazasi ulanish ob'ekti taxmin qilinadi
public function __construct($dbConnection)
{
$this->dbConnection = $dbConnection;
}
public function log(string $message): void
{
// Ma'lumotlar bazasiga yozish logikasi
// ...
echo "Ma'lumotlar bazasiga yozilmoqda: " . $message . PHP_EOL;
}
}
// Turli amalga oshirishlar bilan ishlash uchun interfejsdan foydalanish
function processData(Logger $logger, string $data): void
{
// Ma'lumotlarni qayta ishlash
// ...
$logger->log("Qayta ishlangan ma'lumotlar: " . $data);
}
$fileLogger = new FileLogger('/var/log/app.log');
$dbLogger = new DatabaseLogger(null); // Ma'lumotlar bazasi ulanishi uchun mock
processData($fileLogger, 'Misol ma'lumotlar 1');
processData($dbLogger, 'Misol ma'lumotlar 2');
Asosiy farqlar abstrakt sinflar bilan:
| Xususiyat | Interfeys | Abstrakt sinf |
|---|---|---|
| A'zolar turi | Faqat metodlar (public bo'lishi shart) | Metodlar (public, protected), xususiyatlar |
| Metodlarning amalga oshirilishi | Hech qanday amalga oshirish (faqat imzolar) | Amalga oshirilgan metodlar bo'lishi mumkin |
| Merosxo'rlik | Bir sinf bir nechta interfeysni amalga oshirishi mumkin | Bir sinf faqat bitta abstrakt sinfdan meros olishi mumkin |
| Konstruktor | Yo'q | Bo'lishi mumkin |
| A'zolarning ko'rinish darajasi | Faqat public |
public, protected |