Sobes.tech
Junior

PHP-də interfeyslər nədir?

sobes.tech Süni İntellekt

AI-dan cavab

PHP-də interfeys, sinfinin həyata keçirməli olduğu metodların (onların imzaları ilə birlikdə) tərifidir. Bu, "nə" etdiyini müəyyən edir, amma "necə" deyil.

  • Müqavilə: Interfeysi həyata keçirən sinf, onun daxilində təsvir olunan bütün metodları, eyni adlar, parametrlər və geri dönüş tipləri ilə təmin etməyə razılaşır.
  • Növlərin irsi: Interfeyslər davranışa əsaslanan növləri təyin etməyə imkan verir, yalnız sinif irsi ilə deyil. Bu, çox formallıq üçün faydalıdır. Siz müxtəlif siniflərin obyektləri ilə işləyə bilərsiniz, onlar eyni interfeysi həyata keçirirlər, sanki eyni növdədirlər.
  • Çoxlu davranış irsi: PHP çoxlu sinif irsini dəstəkləmir, amma bir sinif çoxlu interfeysləri həyata keçirə bilər. Bu, sinfin müxtəlif müqavilərdən davranışlar əldə etməsinə imkan verir.
  • Məsuliyyətlərin ayrılması: Interfeyslər davranışın tərifini onun həyata keçirilməsindən ayırmağa kömək edir.
<?php

// Interfeys tərifi
interface Logger
{
    /**
     * Log mesajını qeyd edir.
     * @param string $message Qeyd ediləcək mesaj.
     */
    public function log(string $message): void;
}

// Interfeysi həyata keçirən sinif
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);
    }
}

// Eyni interfeisi həyata keçirən başqa sinif
class DatabaseLogger implements Logger
{
    private $dbConnection; // Verilənlər bazası əlaqə obyekti qəbul edilir

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

    public function log(string $message): void
    {
        // Verilənlər bazasına qeyd etmək üçün loqika
        // ...
        echo "Verilənlər bazasına qeyd edilir: " . $message . PHP_EOL;
    }
}

// Müxtəlif həyata keçirmələrlə işləmək üçün interfeys istifadə olunur
function processData(Logger $logger, string $data): void
{
    // Məlumatların emalı
    // ...
    $logger->log("Emal edilmiş məlumatlar: " . $data);
}

$fileLogger = new FileLogger('/var/log/app.log');
$dbLogger = new DatabaseLogger(null); // Verilənlər bazası əlaqəsi üçün mock

processData($fileLogger, 'Nümunə məlumat 1');
processData($dbLogger, 'Nümunə məlumat 2');

Əsas fərqlər abstrakt siniflərlə:

Xüsusiyyət Interfeys Abstrakt sinif
Üzv növləri Yalnız metodlar (ictimai olmalı) Metodlar (ictimai, qorunan), xüsusiyyətlər
Metodların həyata keçirilməsi Heç bir həyata keçirmə (yalnız imzalar) Həyata keçirilmiş metodlar ola bilər
İrsiyyət Bir sinf çox interfeys həyata keçirə bilər Bir sinf yalnız bir abstrakt sinifdən irs ala bilər
Konstruktor Yoxdur Ola bilər
Üzvlərin görünüş sahəsi Yalnız public public, protected