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, PHP'de çift alt çizgi (__) ile başlayan ve belirli olaylara veya eylemlere yanıt olarak PHP tarafından otomatik olarak çağrılan özel metotlardır. Bunlardan ikisini zaten kullandınız: __construct() ve __destruct().
Bu yöntemler, PHP'nin dahili davranışına kanca atmanıza ve nesnelerinizin yaygın işlemlere nasıl yanıt vereceğini özelleştirmenize olanak tanır.
Örneğin, bir nesneyi yazdırmaya çalıştığınızda ne olur? Veya var olmayan bir özelliğe eriştiğinizde? Sihirli metotlar bu durumlar üzerinde kontrol sahibi olmanızı sağlar.
İşte en yaygın kullanılan sihirli metotlara hızlı bir genel bakış:
| Metot | Tetiklenme Zamanı |
|---|---|
__construct() | Nesne oluşturulduğunda |
__destruct() | Nesne yok edildiğinde |
__toString() | Nesne bir dize olarak kullanıldığında |
__get() | Tanımlanmamış bir özelliğe erişildiğinde |
__set() | Tanımlanmamış bir özelliğe değer atandığında |
__call() | Tanımlanmamış bir metot çağrıldığında |
__clone() | Nesne kopyalandığı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 ile yazdırmaya çalışmak bir hataya neden olur. Sihirli metot bu eylemi yakalar ve bunun yerine bir dize temsili döndürür. Gelecek derslerde, her bir sihirli metodu ayrıntılı olarak inceleyeceğiz.
Görev
KolaySizi sihirli metotlarla tanıştıran bir film kataloğu sistemi oluşturalım. Film verilerini başlatmak için __construct() ve nesne yazdırıldığında temiz bir dize temsili sağlamak için __toString() kullanan bir Movie sınıfı oluşturacaksınız.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
Movie.php— Kataloğunuzdaki filmleri temsil eden birMoviesınıfı oluşturun.$title(string),$director(string) ve$year(integer) için özel (private) özellikleri tanımlamak üzere constructor promotion kullanın. Şu formatta bir dize döndürmek için__toString()sihirli metodunu uygulayın:"[title] ([year]) - Directed by [director]". Bu, film nesnelerinizin ayrı bir metot çağırmadan doğrudan echo ile yazdırılabilmesini sağlar.main.php— Movie dosyasını dahil edin. Üç girdi alacaksınız: bir film başlığı, bir yönetmen adı ve bir yayın yılı. Bu değerleri kullanarak birMovieörneği oluşturun (yılı bir tam sayıya dönüştürün). Ardından film nesnesini doğrudan echo ile yazdırın — çıktıyı üretmek için__toString()metodu otomatik olarak çağrılacaktır.
__toString() metodunun sihri, nesneniz bir dize bağlamında her kullanıldığında PHP'nin bunu otomatik olarak çağırmasıdır. echo $movie->getInfo(); yazmak yerine, sadece echo $movie; yazabilirsiniz ve PHP dönüşümü sizin yerinize halleder. Bu, nesnelerinizle çalışmayı daha sezgisel hale getirir.
Kopya kağıdı
Sihirli metotlar, PHP'de çift alt çizgi (__) ile başlayan ve belirli olaylara veya eylemlere yanıt olarak PHP tarafından otomatik olarak çağrılan özel metotlardır.
Yaygın sihirli metotlar:
| Metot | Tetiklendiği Durum |
|---|---|
__construct() | Nesne oluşturulduğunda |
__destruct() | Nesne yok edildiğinde |
__toString() | Nesne bir dize olarak kullanıldığında |
__get() | Tanımlanmamış bir özelliğe erişildiğinde |
__set() | Tanımlanmamış bir özelliğe değer atandığında |
__call() | Tanımlanmamış bir metot çağrıldığında |
__clone() | Nesne kopyalandığında |
__toString() metodu, bir nesnenin dize temsilini döndürür:
<?php
class Book {
public function __construct(
private string $title
) {}
public function __toString(): string {
return "Book: " . $this->title;
}
}
$book = new Book("PHP Mastery");
echo $book; // Output: Book: PHP Mastery
__toString() olmadan, bir nesneyi ekrana yazdırmaya çalışmak bir hataya neden olur. Sihirli metot bu eylemi yakalar ve nesnenin bir dize bağlamında kullanılmasına olanak tanır.
Kendin dene
<?php
require_once 'Movie.php';
// Girdiyi oku
$title = trim(fgets(STDIN));
$director = trim(fgets(STDIN));
$year = intval(fgets(STDIN));
// YAPILACAK: Giriş değerlerini kullanarak bir Movie örneği oluşturun
// YAPILACAK: Film nesnesini doğrudan ekrana yazdırın (__toString() yöntemi otomatik olarak çağrılacaktı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 KelimesiMetotlarÖzelliklerYapıcı Metot (__construct)Yıkıcı Metot (__destruct)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar KelimesiMetot Geçersiz Kılmafinal Anahtar KelimesiSoyut SınıflarÖzet - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicilere Derinlemesine BakışGetter ve Setter MetotlarıBilgi GizlemeConstructor Promotion (8.0)Özet - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımDependency InjectionAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlama: Derinlemesine İncelemeGenerator'lar ve Iterator'lar13Tasarı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ıKompozit KalıbıRepository Kalıbı2İsim Alanları ve Autoloading
İsim Alanlarına Girişuse Anahtar KelimesiPSR-4 Autoloading StandartıComposer AutoloaderÖzet - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Fazla Arayüz UygulamaArayüz vs Soyut SınıfArayüzler ile Tip BelirlemeÖzet - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Nesne Klonlama__serialize & __unserializeÖzet - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerReadonly Özellikler (PHP 8.1)Özet - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmaya Yeniden BakışArayüzler ile Çok BiçimlilikType Hinting ve Union TypesLate Static BindingÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişÇoklu Trait KullanımıTrait Çakışma ÇözümüTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım12Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı15Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi