Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Rekurencja
Forum PHP.pl > Forum > Przedszkole
ayeo
Witam!
Mam, powiedzmy, dwie klasy: STUDENT i COURSE. Obiekt STUDENT zawiera w sobie kolekcję obiektów COURSE, natomiast obiekty klasy COURSE zawierają kolekcje obiektów STUDENT. Czy takie coś jest poprawne?
M4chu
Oczywiście -- standardowy (akademicki ;-) przykład relacji wiele-do-wielu w relacyjnych bazach danych.
Ociu
Masz ponad 100 postów i dalej nie wiesz, jakie panują zasady na tym subforum? Proszę poprawić nazwę tematu , bo będę zmuszony zamknąć temat.
ayeo
@M4chu, ja nie mówię o bazach danych tylko o rekurencji!
dr_bonzo
A co w tym nieprawidlowego?
Co najwyzej bedziesz mial problem z odsmiecaniem pamieci, bo PHP nie poradzi sobie z usunieciem tak powiazanych obiektow automatycznie - musialbys np. ze studenta, usunac najpierw kursy, zeby pozbyc sie cyklu referencji (zliczanie referencji itd.)
ayeo
Dzięki za odpowiedź, ale mógłbyś troszkę to rozwinąć (jaśniej) ?

edit: czy zastosowanie leniwej konkretyzacji coś tu pomoże? Mam na myśli taką sytuację: Obiekt STUDENT zawiera kolekcję obiektów COURSE, ale żaden z obiektów COURSE nie ładuje kolekcji obiektów STUDENT dopóki nie będzie to konieczne. Dziękuję z góry! winksmiley.jpg





edit2: Może ktoś rozwinąć ten temat... ?


z góry dzięki za wszelkie informacje/wskazówki/sugestie
dr_bonzo
Cykle + rekurencja: http://en.wikipedia.org/wiki/Garbage_colle...erence_counting
tylko ze to jest problemem gdy podczas 1 uruchoienia skryptu zuzywasz MASE pamieci (dla malego skryptu nie masz oc sie przejmowac; ostatnio przez ten problem przekraczalismy 500MB ramu smile.gif) i chcialbys troche jej przyoszczedzic, np. w petli tworzysz tych studentow + kursy, i na zakonczenie petli, te obiekty ci sa niepotrzebne, i oplaca ci sie dopisac unset() zeby zwolnic pamiec. No i gdy masz takie cykle to PHP ci nie pozbedzie sie tych obiektow, musialbys recznie pozbyc sie tej rekurencji/cyklow.

A co do leniwej konretyzacji - nie rozumiem po co ci ona? bo do garbage collectora nic nie da jesli po pierwszy pobraniu kursow zapiszesz je (optymalizacja) w studencie.
ayeo
Proszę o łopatologiczne wytłumaczenie. Załóżmy, że mam obiekt STUDENT zawierający w sobie obiekt COURSE, a ten z kolei zawiera w sobie obiekt STUDENT. Czy, żeby usunąć taki obiekt z pamięci wystarczy w destruktorze (obiektu STUDENT) po prostu usunąć obiekt COURSE?


PS Jak sprawdzić zużycie pamięci pod kątem skryptu? Jak używam memory_get_usage() to mi wychodzi 480MB :/
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.