Menu
Coddy logo textTech

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öntemTetiklendiğ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.

challenge icon

Görev

Kolay

Size 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 bir Movie sı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 bir Movie ö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)

?>
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