Kurucular, new sözcüğünü kullanarak bir sınıfın yeni bir örneğini oluşturduğunuzda özdevinimli olarak çağrılan işlevlerdir. Sınıfla aynı isme sahip olan işlev kurucu işlev olur. Bir sınıfın kurucusu yoksa ama ebeveyn sınıfın varsa ebeveynin kurucusu çağrılır.
<?php
class Hediyeli_Sepet extends Sepet {
function Hediyeli_Sepet() {
$this->mal_ekle("10", 1);
}
}
?>
Bu örnekte, new
sözcüğünü kullanarak her örnek
oluşturuşunda sepete "10" numaralı malzemeden 1 adet eklemek suretiyle
nesneyi ilklendiren bir kurucu içeren Hediyeli_Sepet
sınıfı Sepet sınıfından türetilmektedir. Kurucular
değiştirge alabilir ve hatta daha kullanışlı olması için bu değiştirgeler
seçimlik bile olabilir. Sınıfı değiştirgesiz kullanmayı sağlamak üzere
kurucunun tüm değiştirgeleri öntanımlı değerler sağlanarak seçimlik
yapılabilir:
<?php
class Kuruculu_Sepet extends Sepet {
function Kuruculu_Sepet($mal = "10", $adet = 1) {
$this->mal_ekle ($mal, $adet);
}
}
// hediyeli sepetle aynı.
$normal_sepet = new Kuruculu_Sepet;
// özel sepet...
$ozel_sepet = new Kuruculu_Sepet("20", 17);
?>
Kurucuda oluşan hataların çıktılanmasını önlemek için @ işlecini @new biçeminde kullanabilirsiniz.
<?php
class A
{
function A()
{
echo "A'nın kurucusuyum.\n";
}
function B()
{
echo "A sınıfının B adında sıradan bir işleviyim.\n";
echo "Ben A'nın kurucusu değilim.\n";
}
}
class B extends A
{
}
// B()'yi kurucu olarak çağır
$b = new B;
?>
A sınıfının B() işlevi ister istemez (böyle olsun istenmemesine rağmen) B sınıfının kurucusu haline gelir. PHP 4 işlevin B sınıfının içinde mi tanımlandığına yoksa miras mı alındığına bakmaz.
PHP ebeveyn sınıfın kurucusunu çocuk sınıftan özdevinimli olarak çağırmaz. Sınıfın ebeveyninin kurucusuna yapacağı çağrıları tanımlamak size bırakılmıştır.
Yıkıcılar, bir nesne unset() ile veya basitçe etki alanı dışına çıkarak yokedildiğinde özdevinimli olarak çağrılan işlevlerdir. PHP'de yıkıcılar yoktur. Yıkıcı işlev etkisi elde etmek için register_shutdown_function() işlevini kullanabilirsiniz.