Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP | PHP5 ] Destruktory
Forum PHP.pl > Forum > PHP > Object-oriented programming
scanner
[php:1:5ebf0e21dd]<?php
public function __destruct()
{
unset( $this );
}
?>[/php:1:5ebf0e21dd]

Pytania:
1. Czy to wystarczy, aby zniszczyć obiekt? (Na logikę tak, ale... )
2. Kiedy wywoływane są destruktory?
3. Czy trzeba to robić ręcznie?
Seth
Destruktor jest wywolywany wtedy gdy robisz:
[php:1:082ed2efc0]unset( $obiekt );[/php:1:082ed2efc0]

I jest on potrzebny np. do tego aby zapisac ostatnie dane czy tez zniszczyc cos. Poprzez unset odrazu niszczony jest obiekt, wiec nie trzeba tego robic w destruktorze.
rzseattle
hmm a nie jest tez tak pzypadkiem ze jezeli recznie nie zniszczymy obiektu to destruktor jest wywolywany po zakonczeniu naszego skryptu??
scanner
OK. Znowu wiem więcej smile.gif
DeyV
rzseattle - dokładnie tak. Czyli przy kazdy niszczeniu obiektu - nie ważne czy wywołanym przez użytkownika czy przez proces php.
kurtz
Hej
Cytat
hmm a nie jest tez tak pzypadkiem ze jezeli recznie nie zniszczymy obiektu to destruktor jest wywolywany po zakonczeniu naszego skryptu??
Tak, to prawda. php skonstruowane jest tak by sprzatalo po sobie. Obiekty sa niczszczone a polaczenia do bazy automatycznei zamykane (dlatego m.in. nie trzeba ich zamykac). Destruktury moga sie przydac jesli np operujemy na pamieci dzielonej.


Pozdrawiam
slash.
a wiec o ile sie nie myle tworzac desktruktora mozemy wywolac metody odpowiedzialen za zapisanie stanu sesji, tak aby po przejscu na nastepna strone moc ta sesje odtworzyc, podobnie jak przy uzyciu serialize() i unserialize() - z ta roznica iz te funkcje przydaja sie przy przenoszeniu obiektow lub tablic itp, elementow. Czyli mozemy uzyc destruktora do zapisania stanu sesji a konstruktora do odtworzenia tejze sesji - dobrze rozumiem questionmark.gif
LukaszLenart
Cytat(scanner @ 2003-11-03 23:11:36)
2. Kiedy wywoływane są destruktory?

Kiedy zmienna wychodzi poza zakres, tzn. jesli zadeklarujesz zmienna obiektowa w funkcji to jest ona niszczona po wyjsciu z tej funkcji.
hawk
@slash: Tak naprawdę nie możesz. Przecież serialize() wywołuje __sleep(), więc wywoływałbyś metody obiektu po odpaleniu destruktora!

Poza tym, jeżeli nie niszczysz obiektu ręcznie (przez unset), to nie ma już żadnej sesji. A w sumie w języku z garbage collectorem nie masz żadnej gwarancji, kiedy zostanie wywołany destruktor. Java też ma finalize, co nie znaczy że warto to stosować.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.