php yıkıcı davranış

2 Cevap php

im php yapıcı ve yıkıcı davranışlarını anlamaya çalışıyorum. Yapıcısı ile beklenen ama dolaylı yangın yıkıcı alma konusunda sorun yaşıyorum gibi her şey gider. Ive php.net ve ilgili sitelerdeki tüm okuma yapılır, ama bu soruya bir cevap bulamıyorum.

Ben basit bir sınıf varsa, gibi bir şey:

class test{

     public function __construct(){
          print "contructing<br>";
     }

     public function __destruct(){
          print "destroying<br>";
     }
}

ve ben gibi bir şey ile onu çağırır:

$t = new test;

Bu yapıcı mesajı yazdırır. Ancak, komut biter ve sayfa işlenirken yıkıcı ateş gerektiğini o beklediğiniz. Tabii ki değil.

I unset ($ t) çağırırsanız; komut elbette yıkıcı yangınlar, biter, ama örtülü ateşlemek için bir yol varken?

herhangi bir ipucu için teşekkürler

2 Cevap

Nesne silinir __ yoketme () sihirli bir işlev (unset kullanarak) tahrip / yürütülür. Bu senaryonun kapatma sırasında denir. Bir php komut dosyası yürütme bitirdiğinde, belleği temizler, ama böylece __ imha () yöntemleri adı değildir, gibi nesneleri 'delete' değildir.

Eğer php script yürütülürken tamamlandıktan ateş edildiği, register_shutdown_function() düşünüyor olabilir.

function shutdown()
{
    // code here
    echo 'this will be called last';
}

register_shutdown_function('shutdown');

Benim anlayış script sona erdiği yıkıcılar otomatik olarak kalan nesneler için denir olmasıdır.

Görünümlü olsa manual page on constructors and destructors, tamamen yıkıcı atlamak için tek yol gibi görünüyor sen önce söz konusu nesneye tahrip bir nesnenin yıkıcıdan exit() ararsanız.

Eğer exit() sizin Yıkıcılar herhangi kullanıyor musunuz? Lütfen komut bile birden çok nesne var mı?

Zahmet olmazsa, belki de yerine artık söz var örnek kod daha söz gerçek kod sonrası olabilir. Kenara örnek yapıcısındaki yazım hatası gelen, bu kod should sizin test nesne için constuctor ve yıkıcı hem de diyoruz.