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, 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ış:

MetotTetiklenme 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.

challenge icon

Görev

Kolay

Sizi 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 bir Movie sı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 bir Movie ö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:

MetotTetiklendiğ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)

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