PHP, __construct ve __destruct Yapıları
__construct:
Bir PHP klassı new kelimesi ile oluşturulduğunda klass içersindeki __construct fonksiyonu otomatik olarak klasın oluşturulması ile çalışacaktır. Klass Kurucusu olarak anladırılırlar.
<?php
class AnaSınıf {
function __construct() {
print "AnaSınıf kurucusundayızn";
}
}
class AltSınıf extends AnaSınıf {
function __construct() {
parent::__construct();
print "AltSınıf kurucusundayızn";
}
}
$obj = new AnaSınıf();
$obj = new AltSınıf();
?>
class AnaSınıf {
function __construct() {
print "AnaSınıf kurucusundayızn";
}
}
class AltSınıf extends AnaSınıf {
function __construct() {
parent::__construct();
print "AltSınıf kurucusundayızn";
}
}
$obj = new AnaSınıf();
$obj = new AltSınıf();
?>
Ç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.
__destruct:
Bir PHP klassı yok edildiğinde klass içersindeki __destruct fonksiyonu otomatik olarak klasın yok edilmesi öncesi çalışacaktır. Klass Yıkıcısı olarak anladırılırlar.
<?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 ediliyorn";
}
}
$obj = new YıkıcıSınıf();
?>
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 ediliyorn";
}
}
$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.
- 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.
Kaynak:
Yorumunuzu Ekleyin