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 |