Sınıflar ve Nesneler
PHP Manual

Kurucular ve Yıkıcılar

Kurucular

void __construct ([ mixed $değiştirge [, $... ]] )

PHP 5 geliştiricilerin sınıflar için kurucu yöntemler bildirmesine imkan verir. Bir kurucu yöntemi olan sınıflar her yeni nesne oluşturuluşunda bu yöntemi çağırırlar, bu bakımdan nesne kullanılmadan önce yapılması gereken ilklendirmeler için kurucular çok uygundur.

Bilginize: Çocuk sınıflardan kurucusu olanlar için örtük olarak ebeveyn sınıfın kurucusu çağrılmaz. Ebeveyn sınıfın kurucusunu çocuk sınıftan çağırmak için, çocuk sınıf içinden parent::__construct() çağrısı yapılması gerekir.

Örnek 1 - Yeni tekilleşmiş kurucuların kullanımı

<?php
class AnaSınıf {
   function 
__construct() {
       print 
"AnaSınıf kurucusundayız\n";
   }
}

class 
AltSınıf extends AnaSınıf {
   function 
__construct() {
       
parent::__construct();
       print 
"AltSınıf kurucusundayız\n";
   }
}

$obj = new AnaSınıf();
$obj = new AltSınıf();
?>

Geriye dönük uyumluluk için, PHP 5 belirtilen sınıfa ait bir __construct() yöntemi bulamazsa, sınıfın ismine bakarak eski tarz bir kurucu arayacaktır. Dolayısıyla, uyumluluk sorunu yaşayacağınız tek durum sınıf dahilinde __construct() isimli bir yöntemin amacı dışında kullanılması olabilir.

Diğer yöntemlerin tersine, __construct() ebeveyn __construct() yöntemindekilerden farklı değiştirgelerle kullanılmaya çalışıldığında PHP E_STRICT seviyesinden bir hata iletisi üretmeyecektir.

PHP 5.3.3 itibariyle, bir isim alanlı sınıf isminin son elemanı ile aynı isimdeki yöntemler artık kurucu olarak ele alınmayacaktır. Bu değişiklik isim alanlı olmayan sınıfları etkilemez.

Örnek 2 - İsim alanlı sınıflarda kurucular

<?php
namespace Foo;
class 
Bar
{
    public function 
Bar()
    {
        
// PHP 5.3.0-5.3.2'de kurucu olarak ele alınır
        // PHP 5.3.3 itibariyle sıradan bir yöntem olarak ele alınır
    
}
}
?>

Yıkıcılar

void __destruct ( void )

PHP 5, C++ gibi nesne yönelimli dillerdekine benzer bir yıkıcı tasarımına sahiptir. Yıkıcı yöntem, belli bir nesneye başka bir gönderim yoksa veya nesne kapanma sırasında açıkça yok edildiği anda çalıştırılacaktır.

Örnek 3 - Yıkıcı Örneği

<?php
class YıkıcıSınıf
{
   function 
__construct()
   {
       print 
"Kurucu çalıştı\n";
       
$this->name "YıkıcıSınıf";
   }

   function 
__destruct()
   {
       print 
"" $this->name " yok ediliyor\n";
   }
}

$obj = new YıkıcıSınıf();
?>

Kurucularda olduğu gibi ebeveyn yıkıcılar çocuk sınıflar için dolaylı olarak çağrılmayacaktır. Ebeveyn sınıfın yıkıcısının çalışması için çocuk sınıfın yıkıcısından parent::__destruct() çağrısının yapılması gerekir.

Betiğin icrası exit() kullanılarak durdurulsa bile yıkıcı çağrılacaktır. exit() işlevinin bir yıkıcı içersinde çağrılması kalan kapanma yordamlarının icrasını engelleyecektir.

Bilginize:

Yıkıcılar, HTTP başlıklarının gönderilmiş olmasını sağlamak için betik sonlanırken çağrılırlar. Betiğin kapanma aşamasındaki çalışma dizini bazı SAPI’lerde (Apache gibi) farklı olabilir.

Bilginize:

Bir yıkıcı içinden bir istisna oluşturmaya çalışmak (betiğin sonlandırılması sırasında) ölümcül hata ile sonuçlanır.


Sınıflar ve Nesneler
PHP Manual