Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wywoływanie funkcji dla obiektu
Forum PHP.pl > Forum > PHP > Object-oriented programming
emil_seba
Witam, mam taki problem. Mam klase MenagerDanych, Nauczyciel oraz Klasa :
  1. class MenagerDanych
  2. {
  3. public static function getWychowawceKlasy($idKlasy)
  4. {
  5. $query = " SELECT nazwisko, imie FROM wychowawcy WHERE idKlasy = '$idKlasy'";
  6. $result = mysql_query($query) or die('Wystapil blad przy pobieraniu wychowawcow klas z bazy'.mysql_error().'<br />');
  7.  
  8. if(mysql_num_rows($result)>0)
  9. {
  10. $n = 0;
  11. $obiekt = array();
  12. while ($row = mysql_fetch_array($result))
  13. {
  14. $obiekt[$n] = new Nauczyciel();
  15. $obiekt[$n]->setNauczyciela($row['imie'], $row['nazwisko']);
  16. $n++;
  17. }
  18. return $obiekt;
  19. }
  20. }
  21. }
  22.  
  23. class Nauczyciel
  24. {
  25. $protected imie;
  26. $protected nazwisko;
  27.  
  28. public function setNauczyciela($imie, $nazwisko)
  29. {
  30. $this->imie = $imie;
  31. $this->nazwisko = $nazwisko
  32. }
  33. public function showNauczyciela()
  34. {
  35. return $this->imie.' '.$this->nazwisko;
  36. }
  37.  
  38. }
  39.  
  40. class Klasa
  41. {
  42. $Wychowawca;
  43. $idKlasy;
  44.  
  45. public function getWychowawce()
  46. {
  47. $this->Wychowawca = MenagerDanych::getWychowawceKlasy($this->idKlasy);
  48. }
  49. public function showWychowawce()
  50. {
  51. if(isset($this->Wychowawca))
  52. {
  53. //pierwszy sposob
  54. echo $this->Wychowawca->showNauczyciela(); // nie dziala wyswietla blad : Fatal error: Call to a member function showNauczyciela() on a non-object in..
  55. //drogi sposob - dziala
  56. foreach($this->Wychowawca as $ob)
  57. {
  58. $ob->showNauczyciela();//dziala dobrze
  59. }
  60. }
  61. }
  62. }

I moje pytanie brzmi czy idzie zrobić coś z tym pierwszym sposobem? Drogi sposób działa, ale $Wychowawca nie jest tablica obiektów tylko jednym obiektem, więc chyba użycie funkcji foreach nie jest wskazane. Proszę o pomoc, z góry dziękuje smile.gif
everth
Nielogiczna konstrukcja - metodą getWychowawca zwracasz tablicę zamiast jeden obiekt. Ilu wychowawców może mieć klasa? Za moich czasów tylko jednego. Więc metoda może zwrócić tylko jeden obiekt - wychowawcę danej klasy.

Lepiej też by było jakbyś metodzie getWychowawca dawał obiekt Klasa, a nie tylko id - niech ona sobie to id wyciągnie (na przyszłość gdyby nagle okazało się że potrzebne są dodatkowe dane z Klasy modyfikujemy tylko metodę getWychowawca).

Jak chcesz usprawnić tworzenie obiektów to zainteresuj się PDO i jego metodą fetchObject - ułatwi ci to późniejsze operacje.
emil_seba
tak, masz racje smile.gif Dzięki za odpowiedź już działa. smile.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-2025 Invision Power Services, Inc.