Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [OOP | PHP5 ] Destruktory
scanner
post
Post #1





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




[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?
Go to the top of the page
+Quote Post
Seth
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


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.
Go to the top of the page
+Quote Post
rzseattle
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

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


hmm a nie jest tez tak pzypadkiem ze jezeli recznie nie zniszczymy obiektu to destruktor jest wywolywany po zakonczeniu naszego skryptu??
Go to the top of the page
+Quote Post
scanner
post
Post #4





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




OK. Znowu wiem więcej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
DeyV
post
Post #5





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




rzseattle - dokładnie tak. Czyli przy kazdy niszczeniu obiektu - nie ważne czy wywołanym przez użytkownika czy przez proces php.
Go to the top of the page
+Quote Post
kurtz
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 786
Pomógł: 0
Dołączył: 18.03.2002
Skąd: Wroclaw/Warszawa

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


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
Go to the top of the page
+Quote Post
slash.
post
Post #7





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 7.08.2003
Skąd: Warszawa | Jankowce

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


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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
LukaszLenart
post
Post #8





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 22.11.2003
Skąd: Sucha Beskidzka

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


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.
Go to the top of the page
+Quote Post
hawk
post
Post #9





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


@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ć.
Go to the top of the page
+Quote Post

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: 23.08.2025 - 09:49