![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Nieautoryzowani Postów: 42 Pomógł: 0 Dołączył: 15.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam pewien problem z destruktorem. Problem wygląda następująco: Wywołuje się front_controller i w nim są ładowane klasy z biblioteki. Potem akcja rozgrywa się w modelu. Tam wszystko pięknie działa wszystkie klasy są dostępne. Potem tworzę w nim nowy obiekt klasy X. wywołuję funkcję publiczną tego obiektu i kończę akcje. W destruktorze klasy X jest wykonywana pewna funkcja która wymaga innych klas z biblioteki. Jednak destruktor ten już ich nie widzi. Metoda wywoływana na tym obiekcie może być nawet pusta a i tak straci się biblioteka (ale tylko w obrębie tej klasy). Gdy po prostu stworze obiekt klasy X i nie wywołam na nim żadnej metody to w destruktorze dalej dostępne są klasy z biblioteki. Na prawdę nie wiem jaki może być tego powód. Bardzo proszę o jakieś porady. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Nieautoryzowani Postów: 42 Pomógł: 0 Dołączył: 15.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Hmmm ciekawy temat powiem. Zrobilem kilka testów i oto wyniki:
gdy odpalimy ten plik wynik będzie (u mnie) taki:
gdy jednak zakomentujemy $foo->foo_function(); to wynik już będzie taki:
Ciekawe jest to, że w 1 wypadku pamieć jak widać nie do końca została zwolniona. Test wykonany w PHP 5.2.11. Wersja 5.3.0 już zwalnia całkowicie pamięć. Natomiast co do omawianego problemu to nie znalazłem jednoznacznej odpowiedzi, jednak wydaje mi się ( w oparciu o to co przeczytałem), że jest to spowodowane tym, że jak obiekt jest stworzony ale nie używany w żaden sposób to jest on szybciej likwidowany. Gdy jednak coś z nim robimy PHP czeka do samego końca bo może jeszcze coś z nim się stać i dlatego był kasowany później co powodowało te problemy. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 05:09 |