![]() |
![]() |
![]()
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? |
|
|
![]() |
![]()
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. |
|
|
![]()
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??
|
|
|
![]()
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)
|
|
|
![]()
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.
|
|
|
![]()
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 |
|
|
![]()
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)
|
|
|
![]()
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. |
|
|
![]()
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ć. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 06:48 |