Arayüzlere Giriş
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 27 / 91.
Bir arayüz, sınıfların uyması gereken bir sözleşme tanımlar. Hem soyut hem de somut yöntemler içerebilen soyut sınıfların aksine, bir arayüz herhangi bir uygulama olmadan yalnızca yöntem imzalarını bildirir. Bunu bir söz olarak düşünebilirsin: bir arayüzü uygulayan herhangi bir sınıf, bu belirli yöntemleri sağlayacağını garanti eder.
Bir arayüzü interface anahtar sözcüğünü kullanarak tanımlarsın:
<?php
interface Printable {
public function print();
}
Bu arayüz, Printable uygulayan herhangi bir sınıfın bir print() metoduna sahip olması gerektiğini bildirir. Arayüz, metodun nasıl çalıştığıyla ilgilenmez; yalnızca mevcut olmasıyla ilgilenir.
İşte temel yapıyı gösteren basit bir örnek:
<?php
interface Drivable {
public function start();
public function stop();
}
Arayüz yöntemlerinin gövdesi olmadığını, yalnızca noktalı virgülle biten imzasının bulunduğunu unutmayın. Bir arayüzdeki tüm yöntemler örtük olarak public olduğundan private veya protected kullanamazsınız.
Arayüzler güçlüdür; çünkü ilgisiz sınıfların ortak davranışı paylaşmasına olanak tanırlar. Bir Car ve bir Motorcycle kalıtım açısından hiçbir ortak özelliğe sahip olmayabilir, ancak her ikisi de Drivable arayüzünü uygulayarak start() ve stop() metotlarına sahip olduklarını garanti edebilir.
Temel Nokta: Bir arayüz, bir sınıfın hangi yöntemlere sahip olması gerektiğini tanımlar; bu yöntemlerin nasıl çalışması gerektiğini değil. Uygulayan sınıfların yerine getirmesi gereken bir sözleşme oluşturur.
Görev
KolayArayüzleri tanımanı sağlayacak basit bir mesajlaşma sistemi oluşturalım. Mesajların nasıl işlenmesi gerektiğine ilişkin bir sözleşme belirleyen bir arayüz tanımlayacak ve bir sonraki derste oluşturacağın uygulayıcı sınıflar için temel oluşturacaksın.
Kodunu iki dosya arasında düzenleyeceksin:
Messageable.php:Messageableadlı bir arayüz tanımla. Bu arayüz iki metot imzası bildirmeli: Mesaj oluşturmak içincompose($content)ve mesajı göndermek içindeliver(). Unutma, arayüz metotlarının gövdesi olmaz; yalnızca noktalı virgülle biten imzaları bulunur.main.php: Messageable dosyasını dahil et. Arayüzünün doğru tanımlandığını doğrulamak için PHP'nininterface_exists()işlevini kullanarakMessageable'ın var olup olmadığını kontrol et. Ardından arayüzünü incelemek ve metotlarını listelemek içinReflectionClasskullan. Arayüzünün bir yansımasını oluştur,getMethods()ile metotlarını al (ReflectionMethodnesneleri döndürür) ve her metodungetName()değerini ayrı bir satıra yazdır.
Çıktın, arayüzünün bildirdiği iki metot adını, tanımladığın sırayla ve her biri ayrı bir satırda göstermelidir.
Bu görev tamamen bir arayüz tanımlamaya odaklanır: gelecekteki sınıfların yerine getirmesi gereken sözleşmeye. Nasıl çalışacakları konusunda endişelenmeden, hangi metotların var olması gerektiğini belirliyorsun. Bu uygulama bir sonraki derste geliyor!
Kendin dene
<?php
// Messageable arayüz dosyasını dahil et
require_once 'Messageable.php';
// TODO: Messageable arayüzünün var olup olmadığını kontrol etmek için interface_exists() kullan
// TODO: Messageable arayüzü için bir ReflectionClass nesnesi oluştur
// TODO: getMethods() kullanarak metotları al
// TODO: Metotlar üzerinde döngü yap ve her metot adını kendi satırına yazdır
?>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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesneler$this Anahtar SözcüğüMetotlarÖzelliklerYapıcı (__construct)Yıkıcı (__destruct)Tekrar - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar SözcüğüMetot Geçersiz Kılmafinal Anahtar SözcüğüSoyut SınıflarTekrar - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicileri DerinlemesineGetter ve Setter'larBilgi GizlemeYapıcı Özellik Terfisi (8.0)Tekrar - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Composition ve KalıtımBağımlılık EnjeksiyonuAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlamaya Derinlemesine BakışÜreteçler ve Yineleyiciler13Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik KalıpDepo Kalıbı2Namespace’ler ve Autoloading
Namespace’lere Girişuse Anahtar SözcüğüPSR-4 Autoloading StandardıComposer AutoloaderTekrar - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Çok Arayüz UygulamaArayüz ve Soyut Sınıf KarşılaştırmasıArayüzlerle Tür İpuçlarıTekrar - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString ve __debugInfo__get, __set, __isset, __unset__call ve __callStatic__clone ve Nesne Klonlama__serialize ve __unserializeTekrar - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerSalt Okunur Özellikler (PHP 8.1)Tekrar - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmayı Yeniden Ele AlmaArayüzler Yoluyla Çok BiçimlilikTür İpuçları ve Birleşim TürleriGeç Bağlanan Statik ÇağrılarÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişBirden Çok Trait KullanımıTrait Çakışmalarını ÇözümlemeTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım Karşılaştırması12Tasarım Desenleri 1. Bölüm
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online PHP derleyicisi