CodeBlanks Logo Icon CodeBlanks

Çoklu interface

PHP kursu · Orta seviye · Ders 49/115

Bir sınıfa birden fazla interface uygulayarak sözleşme birleştirmeyi öğrenirsin.

Birden fazla interface uygulama

Bir sınıf birden fazla interface'i aynı anda uygulayabilir. Interface isimleri virgülle ayrılır: class FileLogger implements Logger, Configurable { ... }.

Sınıf, her iki interface'in tüm methodlarını yazmak zorundadır. Logger'ın log() methodu da, Configurable'ın configure() methodu da sınıfta tanımlanmalıdır.

Bu, sözleşmeleri birleştirme (composition) imkânı verir: bir sınıf hem loglanabilir hem de yapılandırılabilir olabilir. Tek bir ebeveyn sınıf extends edilebildiği halde sınırsız interface uygulanabilir.

interface birleştirme örneği

Logger ve Configurable iki interface olsun. FileLogger sınıfı ikisini birden uygular: class FileLogger implements Logger, Configurable { ... }.

Sınıf içinde hem public function log(string $message): void hem public function configure(array $options): void tanımlanır. İki sözleşmenin methodları tek sınıfta birleşir.

Bu sayede FileLogger hem Logger beklenen hem Configurable beklenen yerlerde kullanılabilir. Sınıf, iki capability'yi (yetenek) aynı anda taşır.

Uygulama Document sınıfı iki interface uygular

Önce interface Renderable { public function render(): string; } ve interface Cacheable { public function cacheKey(): string; } tanımla. Sonra class Document implements Renderable, Cacheable yaz; private string $title property'si ve __construct(string $title) yapıcı olsun, yapıcı $this->title = $title atasın. render() methodu return "[doc] " . $this->title, cacheKey() methodu return "doc_" . $this->title döndürsün. Sonra $doc = new Document("Rapor") oluştur ve echo $doc->render() . "\n" ile echo $doc->cacheKey() . "\n" yazdır.

Örnek çözümü göster
Önce iki interface'i tanımla. Sonra class Document implements Renderable, Cacheable içine private $title, __construct, render ve cacheKey methodlarını yaz.
Örnek çözüm:
<?php
// Document sınıfını tanımla
interface Renderable {
    public function render(): string;
}
interface Cacheable {
    public function cacheKey(): string;
}
class Document implements Renderable, Cacheable {
    private string $title;
    public function __construct(string $title) {
        $this->title = $title;
    }
    public function render(): string {
        return "[doc] " . $this->title;
    }
    public function cacheKey(): string {
        return "doc_" . $this->title;
    }
}
$doc = new Document("Rapor");
echo $doc->render() . "\n";
echo $doc->cacheKey() . "\n";

Kendini test et

  1. İki interface uygulayan sınıf ne yapmalı?

    • Yalnızca birinin methodlarını yazmak
    • Sadece sabitleri (const) tanımlamak
    • extends ile ikisini de miras almak
    • Her ikisinin tüm methodlarını yazmak
    Cevabı göster

    Her ikisinin tüm methodlarını yazmak — Doğru. İki interface uygulayan sınıf her ikisinin de tüm methodlarını yazar.

  2. çoklu implements yaz

    class FileLogger ____ Logger, Configurable {
        public function log(string $message): void {}
    }
    Cevabı göster
    class FileLogger implements Logger, Configurable {
        public function log(string $message): void {}
    }
  3. çoklu interface ile ilgili ifadeleri eşleştir

    implements A, B
    İki sözleşme birden
    virgül
    Interface ayırıcı
    tüm methodlar
    Sınıfta yazılır
    eksik method
    Fatal error verir
  4. Çoklu interface'de interface isimleri neyle ayrılır?

    • virgülle
    • noktayla
    • artı işaretiyle
    • ve kelimesiyle
    Cevabı göster

    virgülle — Doğru. Çoklu interface isimleri virgülle ayrılır: implements A, B.

Orta seviye bölümündeki tüm dersler