CodeBlanks Logo Icon CodeBlanks

__destruct metodu

PHP kursu · Orta seviye · Ders 11/115

__destruct ile örnek yok edilirken kaynak temizlemeyi öğrenirsin.

__destruct metodu

Yapıcının tersi yıkıcı (destructor) metodudur: __destruct. Örnek yok edildiğinde otomatik çağrılır. Örnek yok olması, betik bittiğinde veya son referans kalktığında gerçekleşir.

class TempFile {
    public function __construct() {
        echo "Açıldı\n";
    }

    public function __destruct() {
        echo "Kapatıldı\n";
    }
}

Yıkıcının yaygın kullanımı kaynak temizliğidir: açık dosyaları kapatmak, veritabanı bağlantısını bırakmak veya kilitleri çözmek. PHP betik sonunda belleği zaten temizler; bu yüzden yıkıcı çoğu zaman gerekli değildir, ama dış kaynaklarla çalışırken işe yarar.

Tıpkı yapıcı gibi, yıkıcıdan da return ile değer döndürmek beklenmez.

Kaynak temizliği

Yıkıcı çoğu zaman gerekli değildir, çünkü PHP betik bitiminde tüm belleği otomatik temizler. Ancak dış kaynaklar kullanırken işe yarar: bir dosyayı açıp kapatmak, bir veritabanı bağlantısını bırakmak, bir önbellek kilidini çözmek.

public function __destruct() {
    fclose($this->handle);
}

Burada örnek yok edilince açık dosya kapatılır. Yine de en sağlıklı yol, kaynağı kullanım biter bitmez manuel kapatmaktır; yıkıcı bunun yerine kullanılmamalı, son çare olarak görülmelidir.

Uygulama Session sınıfına yapıcı ve yıkıcı ekle

Session adında bir sınıf tanımla. Yapıcı __construct() gövdesinde echo "Oturum açıldı\n"; yazsın. Yıkıcı __destruct() gövdesinde echo "Oturum kapatıldı\n"; yazsın. Sınıfın altında $s = new Session(); ile bir örnek oluştur. Betik sonunda PHP yıkıcıyı çağırır; bu yüzden iki satır çıktı görülür.

Örnek çözümü göster
Yapıcıyı public function __construct() biçiminde, gövdede echo "Oturum açıldı\n"; ile yaz. Yıkıcıyı public function __destruct() biçiminde, gövdede echo "Oturum kapatıldı\n"; ile yaz. Sınıf dışında $s = new Session(); ile örnek oluştur.
Örnek çözüm:
<?php
// Session sınıfını tanımla, yapıcı ve yıkıcı ekle
class Session {
    public function __construct() {
        echo "Oturum açıldı\n";
    }

    public function __destruct() {
        echo "Oturum kapatıldı\n";
    }
}
$s = new Session();

Kendini test et

  1. Yıkıcı metodun adını tamamla

        public function ____() {
            echo "Kapatıldı\n";
        }
    Cevabı göster
        public function __destruct() {
            echo "Kapatıldı\n";
        }
  2. Kavramları eşle

    __construct
    örnek doğunca çalışır
    __destruct
    örnek yok edilince çalışır
    fclose
    dosyayı kapatır
    magic method
    sihirli metod kategorisi
  3. __destruct ne zaman çağrılır?

    • new ile örnek oluşturulduğunda
    • Method çağrıldığında
    • Örnek yok edildiğinde, betik sonunda veya referans kalkınca
    • Sınıf tanımlandığında
    Cevabı göster

    Örnek yok edildiğinde, betik sonunda veya referans kalkınca — Doğru. __destruct örnek bellekten kalkarken çalışır; bu çoğu zaman betik sonudur.

Orta seviye bölümündeki tüm dersler