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