PHP Velho Oeste 2024

Kurucular

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 
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.

Dikkat

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.

add a note add a note

User Contributed Notes 2 notes

up
0
Anonymous
9 years ago
I only just noticed this page is specifically referring to PHP 4, so I'd suggest changing
"There are no destructors in PHP."
to
"There are no destructors in PHP 4. Support for destructors was added in PHP 5."
up
0
Anonymous
9 years ago
"There are no destructors in PHP. You may use register_shutdown_function() instead to simulate most effects of destructors. "

I thought this was a particularly strange statement, seeing as that I use __construct() en __destruct() the whole time. And surely, from http://php.net/manual/en/language.oop5.decon.php we can read this:

"void __destruct ( void )
PHP 5 introduces a destructor concept similar to that of other object-oriented languages, such as C++. The destructor method will be called as soon as there are no other references to a particular object, or in any order during the shutdown sequence. "

And even:
"The destructor will be called even if script execution is stopped using exit(). Calling exit() in a destructor will prevent the remaining shutdown routines from executing."

So PHP definitely supports destructors.
To Top