Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: odbieranie danych z klasy
Forum PHP.pl > Forum > PHP > Object-oriented programming
dawidessa
Cześć. Mam pytanie, czy znacie lepsze (bardziej optymalne) rozwiązanie dla takiego problemu?

1. Jest klasa, która za zadanie ma pobierać dane z bazy (powiedzmy, że select ma 3 pola)
pobieram przykładowo imię, nazwisko i adres zamieszkania wszystkich userów w bazie, więc pobierze mi pare rekordów, w każdym po 3 dane (imie, nazwisko, adres).
2. Robię w while tablice wielowymiarową, powiedzmy
$tablica[id]['imie'] = $imie_z_bazy_dla_tego_rekordu;
$tablica[id]['nazwisko'] = analogicznie j.w.
$tablica[id]['adres'] = j.w.
3. returnuje w klasie $tablica.
4. wykonuje funkcje klasy, w returnie dostaje ta tablice wielowymiarową przez co znowu muszę tworzyć pętle (for), zeby te wyniki wyświetlić.

moje pytanie brzmi, jak rozwiązać ten problem optymalnie?
irmidjusz
Nie ma innego wyjścia, jak obrabiać sekwencyjnie tą strukturę danych. Wszystko się sprowadza do jakiegoś rodzaju pętli. Jeśli martwisz się tym, że wiele razy jakieś pętle będą iterowały po tej tablicy wyników robiąc za każdym razem co innego, i że będzie to nieoptymalne - to może niepotrzebnie się martwisz? Jeśli jest to jednak faktycznie problem, to rozwiązaniem jest zrobienie wszystkiego w jednej, dużej brzydkiej pętli (ta technika optymalizacyjna ma nawet swoją nazwę, nie pamiętam teraz jaką), ewentualnie pobieranie mniejszej ilości danych (stronicowanie itp.) lub przechowywanie wyników tymczasowych, żeby niepotrzebnie nie iterować itd. No ale takie rozwiązania zaśmiecają kod i są robione tylko w wyjątkowych przypadkach (zwykle mocno naruszają paradygmaty OOP). Czasami może też pomóc zwracanie referencji do utworzonej tablicy (jeśli jest ogromna) i operowanie bezpośrednio na niej, ale generalnie trzeba unikać takiego kombinowania.

Podsumowując, najoptymalniej by było, gdyby robić wszystkie operacje przetwarzające te pobrane z bazy dane w jednej pętli, od razu w momencie ich pobierania, i najlepiej operować na generatorze zwracającym dane z zapytania do bazy, z pominięciem etapu tworzenia w PHP pośredniej tablicy przechowującej pobrane wiersze, ale zdajesz sobie chyba sprawę, że to jest powrót do programowania we wczesnym Basicu...
dawidessa
Dzięki. Staram się ograniczać pobrane rekordy do jak najmniejszej liczby. Faktycznie może niepotrzebnie się przejmuję.
Daimos
Na pocieszenie powiem Ci, że chyba każdy framework po pobraniu danych z bazy, przetwarza je w pętli (przynajmniej raz) i dopiero oddaje do zabawy. Dzięki temu mamy też modele.
Wszystko jest przystosowane do małej ilości danych, czyli takiej, na której będziesz operował. W momencie, kiedy będziesz pobierał na raz 1mln rekordów z bazy, można myśleć nad innymi rozwiązaniami wink.gif
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-2024 Invision Power Services, Inc.