__destruct metodu
__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
-
Yıkıcı metodun adını tamamla
public function ____() { echo "Kapatıldı\n"; }Cevabı göster
public function __destruct() { echo "Kapatıldı\n"; } -
Kavramları eşle
- __construct
- örnek doğunca çalışır
- __destruct
- örnek yok edilince çalışır
- fclose
- dosyayı kapatır
- magic method
- sihirli metod kategorisi
-
__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.