Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Metoda zwracająca tablicę? Jak?
l05i3k
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.08.2006
Skąd: Stalowa Wola

Ostrzeżenie: (0%)
-----


Witam,
dopiero raczkuje w dziedzinie projketowania obiektowego, wiec prosilbym o w miare przystępne wyjaśnienie rozwiązania.

Otóż, często operując na elementach z bazdy danych, trzeba wyświetlić ich kilka, jeden pod drugim. W programowaniu proceduralnym robiłem to tak (uzywajac mysqli):
  1. <?php
  2. $baza = new mysqli ('localhost', 'login', 'haslo', 'baza');
  3.  
  4. $odczytaj = "SELECT * FROM `wiadomosci` ORDER BY `id` DESC LIMIT 10 ";
  5. $news = $baza->query($odczytaj);
  6.  
  7. $liczba_newsow = $news->num_rows;
  8.  
  9. for ($i=0; $liczba_newsow > $i; $i++)
  10. {
  11.  $rekord = $news->fetch_assoc();
  12.  echo $rekord['id'].'<br>';
  13. }
  14. ?>
Pytanie moje jest następujące. Jak osiągnąć podobny efekt operując na klasach?

Załóżmy że mam coś takiego:
  1. <?php
  2. class News {
  3.  private $db; // uchwyt bazy
  4.  private $cfg; // konfiguracja
  5.  private $id;
  6. // [..] dalsze zmienne
  7.  private $kategoria;
  8.  
  9.  public function __construct() {
  10. $this->db = new DB();
  11. $this->cfg = new Config();
  12.  }
  13.  
  14.  public function pobierzDane($id) {
  15. $sql = "SELECT * FROM `".$this->cfg->prefix."_news` WHERE `id` = '".$id."' LIMIT 1;";
  16. $zapytanie = $this->db->query($sql);
  17.  
  18. $dane = $this->db->fetch($zapytanie);
  19.  
  20. $this->id = $dane['id'];
  21. $this->tytul = $dane['tytul'];
  22. $this->tresc = $dane['tresc'];
  23. $this->tagi = $dane['tagi'];
  24. $this->notatki = $dane['notatki'];
  25. $this->data = $dane['data'];
  26. $this->odslony = $dane['odslony'];
  27. $this->obrazek = $dane['obrazek'];
  28. $this->kategoria = $dane['kategoria'];
  29.  }
  30.  
  31.  public function pobierzOstatnie($ilosc, $poczatek=0, $kategoria=0) {
  32. $sql = "SELECT id FROM `".$this->cfg->prefix."_news` WHERE `kategoria` = '".$kategoria."' ORDER BY `id` DESC LIMIT ".($poczatek*$ilosc).", ".$ilosc.";";
  33. $zapytanie = $this->db->query($sql);
  34. $dane = $this->db->fetch($zapytanie);
  35.  
  36. return $dane;
  37.  }
  38.  
  39.  public function getId() {
  40. return $this->id;
  41.  }
  42.  
  43.  // [..] kolejne analogiczne metody
  44.  
  45.  public function getObrazek() {
  46. return $this->obrazek;
  47.  }
  48. }
  49. ?>
Jak można wyciągnąć z tego wszystkie dane? Bo metoda pobierzOstatnie() zwraca mi jdynie ostatnie id ostatniego rekordu... (możliwe, że gdzieś zrobiłem błąd).
W moim zamierzeniu było, aby metoda pobierzOstatnie() zwracała mi id kolenych newsów, które później wykorzystywał bym do wywołania metody pobierzDane() z $id otrzymanym z metody pobierzOstatnie().

Tak na marginesie, mozemy zalozyc ze mam sterownik w tym stylu:
  1. <?php
  2. class DB {
  3.  public function __construct() {
  4. mysql_connect('localhost', 'login', 'haslo');
  5. mysql_select_db('baza');
  6.  }
  7.  
  8.  public function query($sql) {
  9. return mysql_query($sql);
  10.  }
  11.  
  12.  public function num_rows($sql) {
  13. return mysql_num_rows($sql);
  14.  }
  15.  
  16.  public function fetch($sql) {
  17. return mysql_fetch_assoc($sql);
  18.  }
  19. }
  20. ?>
Na PDO, jeszcze przyjdzie czas, zreszta z tej postaci to nie będzie problem...

Mam nadzieje, że nie napisałem tego przesadnie chaotycznie i da sie cos z tego zrozumiec...
Z gory dziekuje za pomoc (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował l05i3k 28.12.2007, 19:35:36
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 17:43