![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 1 Dołączył: 28.09.2007 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Wydaje mi się, że w PHP generalnie nie ma konieczności jawnego definiowania destruktorów obiektu, chyba, że chce się, żeby coś "na do widzenia" zrobiły, pamięć gdzie się tylko da jest automatycznie zwalniana, ale czy na pewno?
Powiedzmy, że mam wewnątrz metody coś takiego: $x = new krowa(); ..... return $x->wynik; Powiedzmy, że krowa to krowiasty obiekt, zawierający sporo danych. W mojej metodzie interesuje mnie tylko jedna właściwość tego obiektu, którą zwracam. Po każdym return $x->wynik pamięć obiektu jest zwalniana, prawda? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
PHP używa licznika referencji do określania czy pamięć należy zwolnić czy nie. unset usuwa jedynie referencję, a sam obiekt znika dopiero wtedy, gdy usunięta zostanie ostatnia. Wersje PHP poniżej 5.3.0 nie potrafią wykrywać cykli, tzn. obiekt A wskazuje na B, B na A, lecz do żadnego z nich nie ma dostępu z reszty skryptu. Dopiero najnowsze PHP potrafi się tym zająć, choć można to wyłączyć, a ponadto na bugtrackerze są zgłoszone jakieś niepotwierdzone przez twórców błędy o wyciekach pamięci. Osobiście skłaniam się ku temu, że jakieś wycieki tam są, bo to niemożliwe jest, żeby po wyczyszczeniu ilość zajętej pamięci... rosła.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 07:24 |