Menu
Coddy logo textTech

Birden Çok Arayüz Uygulama

Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 29 / 91.

Bir sınıfın yalnızca bir üst sınıfı genişletebildiği kalıtımın aksine, PHP bir sınıfın birden fazla arayüzü uygulamasına izin verir. Bu, farklı sözleşmeleri birleştirme esnekliği sunarak sınıflarınızı daha çok yönlü hâle getirir.

Birden fazla arayüz uygulamak için implements anahtar sözcüğünden sonra arayüzleri virgüllerle ayırın:

<?php
interface Printable {
    public function print();
}

interface Savable {
    public function save();
}

class Report implements Printable, Savable {
    private $title;
    
    public function __construct($title) {
        $this->title = $title;
    }
    
    public function print() {
        return "Printing: " . $this->title;
    }
    
    public function save() {
        return "Saving: " . $this->title;
    }
}

$report = new Report("Sales Report");
echo $report->print() . "\n";
echo $report->save();

Çıktı:

Printing: Sales Report
Saving: Sales Report

Report sınıfı, Printable ve Savable içindeki tüm metotları uygulayarak her iki sözleşmeyi de yerine getirir. Her bir arayüzde bildirilen her metot için uygulama sağlamalısın.

Bu yaklaşım güçlüdür, çünkü tekli kalıtımın kısıtlamaları olmadan birden çok gereksinimi karşılayan sınıflar oluşturmanıza olanak tanır. Bir sınıf aynı anda yazdırılabilir, kaydedilebilir, dışa aktarılabilir ve daha fazlası olabilir.

Önemli Nokta: Birden çok arayüzü uygulamak için virgül kullanın. Sınıfınız, uyguladığı her arayüzdeki tüm yöntemlerin somut uygulamalarını sağlamalıdır.

challenge icon

Görev

Kolay

Tek bir sınıfın farklı yetenekler kazanmak için birden fazla arayüzü nasıl uygulayabileceğini gösteren bir medya dosyası sistemi oluşturalım.

Hem oynatılabilen hem de paylaşılabilen medya dosyalarını işlemek üzere birlikte çalışan dört dosya oluşturacaksın:

  • Playable.php: Tek bir metot imzasına sahip Playable arayüzünü tanımla: play(). Bu sözleşme, oynatılabilir herhangi bir medyanın başlatılabilmesini sağlar.
  • Shareable.php: Tek bir metot imzasına sahip Shareable arayüzünü tanımla: share($platform). Bu sözleşme, paylaşılabilir herhangi bir içeriğin farklı platformlara dağıtılabilmesini sağlar.
  • Video.php: Hem Playable hem de Shareable arayüzlerini uygulayan bir Video sınıfı oluştur. Her iki arayüz dosyasını da en üstte dahil et. Sınıf, özel bir $title özelliğine ve özel bir $duration özelliğine (dakika cinsinden) sahip olmalıdır. Yapıcı, başlığı ve süreyi kabul eder. play() metodunu, "Playing video: [title] ([duration] min)" döndürecek şekilde uygula. share($platform) metodunu, "Sharing [title] on [platform]" döndürecek şekilde uygula.
  • main.php: Video dosyasını dahil et. Üç girdi alacaksın: video başlığı, bir tamsayıya dönüştürülecek süre (bir dize olarak) ve bir platform adı. Başlık ve süreyle bir Video nesnesi oluştur. İlk satırda play() çağrısının sonucunu yazdır, ardından ikinci satırda platformla birlikte share() çağrısının sonucunu yazdır.

Video sınıfın aynı anda iki ayrı sözleşmeyi yerine getirir. Her medya gibi oynatılabilir ve sosyal platformlarda paylaşılabilir. Birden fazla arayüz uygulamanın gücü budur: tek bir sınıf, tek bir kalıtım zinciriyle sınırlı kalmadan farklı kaynaklardan yetenekler kazanır.

Kendin dene

<?php
// Video dosyasını dahil et
require_once 'Video.php';

// Girdileri oku
$title = trim(fgets(STDIN));
$duration = intval(trim(fgets(STDIN)));
$platform = trim(fgets(STDIN));

// TODO: title ve duration ile bir Video nesnesi oluştur

// TODO: play() çağrısının sonucunu ilk satıra yazdır

// TODO: platform ile share() çağrısının sonucunu ikinci satıra yazdır

?>
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online PHP derleyicisi