Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Co zamiast tablicy?
Forum PHP.pl > Forum > PHP > Object-oriented programming
madreus
Witam!
Zaczynam dopiero zdobywać wiedzę o wzorcach projektowych, więc jakby co nie bijcie winksmiley.jpg

W przykładzie z klasą Articles
http://www.phppatterns.com/docs/design/the...method#layering
trafiłem na adnotację, że metoda z tej klasy ładuje całą zawartość tabeli do tablicy, a tak nie powinno się robić.
Cytat
Note: the Articles class above fetches the entire contents of a table and places it in a PHP array. In general this is a bad idea - what if you have 10000+ articles? I’m just doing it here to keep the example code simple (i.e. don’t try this at home).

Stąd moje pytanie, co autor mógł mieć na myśli? Jest jakiś inny (niż tablice), bardziej wydajny sposób operowania na dużych ilościach danych, który można byłoby zastosować w tym przykładzie?
osl
autor miał na myśli wczytywanie całej tabeli (prawdopodobnie z jakiejś bazy danych) do tablicy w php, co rzeczywiście na dłuższą metę jest słabym pomysłem winksmiley.jpg
erix
Tablica jest prostsza niż obiekt, stąd będzie wydajniejsza.

A już na pewno mniej pamięciożerna. Jeśli rozważana klasa bazuje na setterach/getterach - tablice 100% będą szybsze.
erix
Jeśli dobrze rozumiem, to korzystasz wtedy z ArrayObject.
Pr0100
Cytat
tablica numeryczna? nie bardzo - predzej asocjacyjna...


Czemu nie? Zawsze myślałeś że jest ona bardziej wydajna (a przypomnę że temat ten dotyczy wydajności a nie wygody)

Cytat
a jezeli mowimy o tablicy bez metod, z wszystkimi zmiennymi publicznymi?


ale jaki ma sens obiekt bez metod? Co uzyskasz wykonując taki zabieg?
erix
Cytat
(a przypomnę że temat ten dotyczy wydajności a nie wygody)

OK, ale wtedy masz problemy z poszukiwaniem kluczy dla danych własności. Ostatecznie zostają jeszcze stałe zawierające indeksy numeryczne, ale podejrzewam, że różnice w prędkości będą się mieściły w granicach błędu statystycznego...

Cytat
ale jaki ma sens obiekt bez metod? Co uzyskasz wykonując taki zabieg?

Można spróbować to podciągnąć pod czytelność i chęć pogrupowania wraz ze stałymi, ale czy ja wiem... No i odchodzi problem widzialności - klasa statyczna...
.chudy.
Zainteresuj się leniwą konkretyzacją, na forum było już kilka tematów
dem
Cytat(erix @ 16.06.2009, 12:04:40 ) *
OK, ale wtedy masz problemy z poszukiwaniem kluczy dla danych własności. Ostatecznie zostają jeszcze stałe zawierające indeksy numeryczne, ale podejrzewam, że różnice w prędkości będą się mieściły w granicach błędu statystycznego...
Można spróbować to podciągnąć pod czytelność i chęć pogrupowania wraz ze stałymi, ale czy ja wiem... No i odchodzi problem widzialności - klasa statyczna...


mozna jescze rowazyc inne struktury danych.. zalezy co chcemy przeszukiwac i jaka chcemy miec wydajnosc...

"jesli nie tablica jako kontener danych to co?"

np drzewo bst, avl, lub moze czerwono czarne?
moze kopiec?
moze koleji fifo albo lifo ?

zalezy jaki efekt koncowy z jaka wydajnoscia chcemy uzyskac...
plurr
ArrayObject o którym pisał erix jest fajnym rozwiązaniem, dodam przykład z manuala.

  1. <?php
  2. class TestArrayObject extends ArrayObject {  
  3.    public function __set($name, $val) {
  4.        $this[$name] = $val;
  5.    }
  6.  
  7.    public function __get($name) {
  8.        return $this[$name];
  9.    }
  10. }
  11. $obj = new TestArrayObject();
  12. $obj->a = 'aaa';
  13. echo $obj->a . "\n";
  14. ?>
erix
A po co aż tak?

  1. <?php
  2. $tablica = array();
  3.  
  4. $obj = new ArrayObject($tablica);
  5. $obj->klucz = 'asd';
  6.  
  7. echo $obj->klucz;
  8. ?>

I masz to samo. tongue.gif
plurr
O prosze, jeszcze prościej. Szkoda że w php nie ma jako takiego głównego obiektu (tj w javie Object), co prawda niby jest stdObj, ale jakieś to kulawe.
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.