Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> dlaczego exit nie dziala jak nalezy?, pytanie retoryczne
qbs
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 22.09.2008

Ostrzeżenie: (0%)
-----


witam wszystkich z gory na dol.
w dniu dzisiejszym, wraz z kumplem od spizowego kufla udalo nam sie znalezc pewna bardzo przykra rzecz. co prawda 99% osob ma to gdzies, jak i ja dotychczas, lecz w swojej ulomnosci nawet nie zdawalem sobie sprawy ze funkcja oferowana przez php, jaka jest exit() jest niezbyt poprawna. mianowicie, dziala ona w identyczny sposob jak die() i w brew temu co pisze w dokumentacji, mozna je bezczelnie obejsc. oczywiscie nie ma to wplywu na dzialanie poprawnie napisanego kodu, lecz dla osob poczatkujacych moze to byc zwyczajny "kwas" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

nie wiem czemu bylem przekonany, ze funkcja exit, zabija z miejsca watek w ktorym wykonywany jest skrypt (w przeciwienstwie do die ktory pozwala jeszcze destruktorom na dzialanie).

chcialem przez ten post zapytac czy jest cos co moglem pominac w dokumentacji, na tym forum tudziez konfiguracji php?

dla leniwych wrzucam kod (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Kod
<?php

class innaklasa
{

    public function __construct()
    {
    
        print "inna klasa<br />";
    }

    public function zrob()
    {
    
        try
        {
            
            throw new exception("test");
        }
        catch(Exception $e)
        {

            print "<pre>";
            print_r($e);
        }
    }
}

class klasa
{

    public function __construct()
    {
        
        print "konstruktor<br />";
    }
    public function __destruct()
    {

        print "destruktor<br />";
        $innaklasa = new innaklasa;
        $innaklasa->zrob();
    }
}

$c = new klasa;
exit;


Ten post edytował qbs 23.09.2008, 13:32:37
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ddiceman
post
Post #2





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Zastanów się tak naprawdę, dlaczego tak jest a dojdziesz do tego, że jest to zamiarem a nie przypadkiem. Destruktor ma za zadanie wykonanie czynności przed usunięciem obiektu innych niż zwolnienie pamięci (co odbywa się samoczynnie). A zatem np. pokasowanie tymczasowych plików/tabel etc. Dlatego też zablokowanie obsługi destruktorów po exit()/die() powodowałoby pozostawianie w systemie różnorakich śmieci.
PHP przed zakończeniem wykonywania skryptu niszczy wszystkie referencje do wszystkich zadeklarowanych obiektów, co implikuje wywołanie destruktorów dla każdego obiektu. Nazywa się to cleanup routine
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 13:58