Sihirli Metotlara Giriş
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 44 / 91.
Sihirli metotlar, çift alt çizgiyle (__) başlayan ve belirli olaylara veya eylemlere yanıt olarak PHP tarafından otomatik olarak çağrılan özel PHP metotlarıdır. Bunlardan ikisini zaten kullandınız: __construct() ve __destruct().
Bu yöntemler, PHP'nin dahili davranışına bağlanmanıza ve nesnelerinizin yaygın işlemlere nasıl yanıt vereceğini özelleştirmenize olanak tanır.
Örneğin, bir nesneyi yazdırmayı denediğinizde ne olur? Ya da var olmayan bir özelliğe eriştiğinizde? Sihirli yöntemler bu durumlar üzerinde kontrol sahibi olmanızı sağlar.
İşte en sık kullanılan sihirli yöntemlere hızlı bir genel bakış:
| Yöntem | Tetiklendiği durum |
|---|---|
__construct() | Nesne oluşturulduğunda |
__destruct() | Nesne yok edildiğinde |
__toString() | Nesne bir dize olarak kullanıldığında |
__get() | Tanımlanmamış özelliğe erişildiğinde |
__set() | Tanımlanmamış özellik ayarlandığında |
__call() | Tanımlanmamış yöntem çağrıldığında |
__clone() | Nesne klonlandığında |
<?php
class Book {
public function __construct(
private string $title
) {}
public function __toString(): string {
return "Book: " . $this->title;
}
}
$book = new Book("PHP Mastery");
echo $book;
Çıktı:
Book: PHP Mastery__toString() olmadan bir nesneyi echo etmeye çalışmak hataya neden olurdu. Sihirli metot bu işlemi yakalar ve bunun yerine bir dize gösterimi döndürür. Gelecek derslerde her sihirli metodu ayrıntılı olarak inceleyeceğiz.
Görev
KolaySize sihirli yöntemleri tanıtan bir film kataloğu sistemi oluşturalım. Film verilerini başlatmak için __construct() kullanan ve nesne yazdırıldığında temiz bir dize gösterimi sağlamak için __toString() kullanan bir Movie sınıfı oluşturacaksınız.
Kodunuzu iki dosya arasında düzenleyeceksiniz:
Movie.php: Kataloğunuzdaki filmleri temsil eden birMoviesınıfı oluşturun.$title(string),$director(string) ve$year(integer) için private özellikleri tanımlamak üzere yapıcı terfi özelliğini kullanın. Biçimlendirilmiş bir dize döndürmek için__toString()sihirli yöntemini uygulayın:"[title] ([year]) - Directed by [director]". Bu, ayrı bir yöntem çağırmadan film nesnelerinizin doğrudan yankılanmasını sağlar.main.php: Movie dosyasını dahil edin. Üç girdi alacaksınız: bir film adı, bir yönetmen adı ve bir vizyon yılı. Bu değerleri kullanarak birMovieörneği oluşturun (yılı bir tamsayıya dönüştürün). Ardından film nesnesini doğrudan yankılayın: çıktıyı üretmek için__toString()yöntemi otomatik olarak çağrılacaktır.
__toString() yönteminin sihri, nesneniz bir dize bağlamında kullanıldığında PHP'nin bu yöntemi otomatik olarak çağırmasıdır. echo $movie->getInfo(); yazmak yerine, doğrudan echo $movie; yazabilirsiniz ve dönüşümü PHP sizin için gerçekleştirir. Bu, nesnelerinizle çalışmayı daha sezgisel hâle getirir.
Kendin dene
<?php
require_once 'Movie.php';
// Girdiyi oku
$title = trim(fgets(STDIN));
$director = trim(fgets(STDIN));
$year = intval(fgets(STDIN));
// TODO: Girdi değerlerini kullanarak bir Movie örneği oluştur
// TODO: Movie nesnesini doğrudan echo et (__toString() metodu otomatik olarak çağrılacak)
?>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