PHP için __destruct görünürlük

2 Cevap php

__destruct() fonksiyonu için "görünürlük" kamu veya başka bir şey olabilir mi? Benim grup için bir standartlar doc yazmaya çalışıyorum ve bu soru geldi.

2 Cevap

Mark Biek cevabı ek olarak:

__ Imha () fonksiyonu, kamu ilan edilmelidir. Aksi halde, fonksiyon komut dosyası kapatma idam olmayacak:

Warning: Call to protected MyChild1::__destruct() from context '' during shutdown ignored in Unknown on line 0
Warning: Call to private MyChild2::__destruct() from context '' during shutdown ignored in Unknown on line 0

Bu zararlı, ama oldukça kirli olmayabilir.

Ama bu konuda en önemli şey: yıkıcı özel ilan veya korumalı ise, çalışma zamanı çöp toplayıcı nesnelerin serbest çalışır anda ölümcül bir hata atar:

<?php
class MyParent
{
    private function __destruct()
    {
        echo 'Parent::__destruct';
    }
}

class MyChild extends MyParent
{
    private function __destruct()
    {
        echo 'Child::__destruct';
        parent::__destruct();
    }
}

$myChild = new MyChild();
$myChild = null;
$myChild = new MyChild();

?>

çıkışlar

Fatal error: Call to private MyChild::__destruct() from context '' in D:\www\scratchbook\destruct.php on line 20

(Mükemmel örneğin Mark Biek için teşekkürler!)

Ben bir alt açıkça üst sınıf __destruct yöntemi çağırmak gerekiyor durumunda ortak olması gerekir düşünüyorum.

Böyle bir şey bir hata atmak:

<?php
class MyParent
{
    private function __destruct()
    {
        echo 'Parent::__destruct';
    }
}

class MyChild extends MyParent
{
    function __destruct()
    {
        echo 'Child::__destruct';
        parent::__destruct();
    }
}

$myChild = new MyChild();
?>