Sobes.tech
Junior

PHP'de arayüzler nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

PHP'de arayüz, bir sınıfın uygulaması gereken metodların (imzalarıyla birlikte) tanımlandığı bir sözleşmedir. Bu, "ne" yapacağını tanımlar, ama "nasıl" yapacağını değil.

  • Sözleşme: Bir arayüzü uygulayan sınıf, bu arayüzde tanımlanan tüm metodları, aynı isimler, parametreler ve dönüş tipleriyle sağlamayı taahhüt eder.
  • Tür kalıtımı: Arayüzler, davranışa dayalı türler tanımlamaya izin verir, sadece sınıf hiyerarşisiyle değil. Bu, çok biçimlilik için faydalıdır. Aynı arayüzü uygulayan farklı sınıfların nesneleriyle çalışabilirsiniz, sanki aynı türdeymiş gibi.
  • Çoklu davranış kalıtımı: PHP çoklu sınıf kalıtımını desteklemez, ama bir sınıf birden fazla arayüzü uygulayabilir. Bu, bir sınıfın birkaç sözleşmeden davranışlar kazanmasını sağlar.
  • Sorumlulukların ayrılması: Arayüzler, davranış tanımını ve uygulamasını ayırmaya yardımcı olur.
<?php

// Arayüz tanımı
interface Logger
{
    /**
     * Log mesajı kaydeder.
     * @param string $message Kaydedilecek mesaj.
     */
    public function log(string $message): void;
}

// Arayüzü uygulayan sınıf
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);
    }
}

// Aynı arayüzü uygulayan başka bir sınıf
class DatabaseLogger implements Logger
{
    private $dbConnection; // Bir veritabanı bağlantı nesnesi varsayılır

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

    public function log(string $message): void
    {
        // Veritabanına kaydetme mantığı
        // ...
        echo "Veritabanına kaydediliyor: " . $message . PHP_EOL;
    }
}

// Farklı uygulamalarla çalışmak için arayüz kullanımı
function processData(Logger $logger, string $data): void
{
    // Veri işleme
    // ...
    $logger->log("İşlenmiş veri: " . $data);
}

$fileLogger = new FileLogger('/var/log/app.log');
$dbLogger = new DatabaseLogger(null); // Veritabanı bağlantısı örneği için mock

processData($fileLogger, 'Örnek veri 1');
processData($dbLogger, 'Örnek veri 2');

Soyut sınıflarla temel farklar:

Özellik Arayüz Soyut sınıf
Üye türleri Sadece metodlar (public olmalı) Metodlar (public, protected), özellikler
Metod uygulaması Yok (sadece imzalar) Uygulanmış metodlar içerebilir
Kalıtım Bir sınıf birden fazla arayüz uygulayabilir Bir sınıf sadece bir soyut sınıftan kalıtabilir
Yapıcı (constructor) Yok Olabilir
Üye erişim alanları Sadece public public, protected