Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zasięg zmiennych
Forum PHP.pl > Forum > Przedszkole
marcwars
Witam,
próbuję w sposób obiektowy uszczuplić kod, po to, aby używać go w kilku miejscach, ale mam problem z zasięgiem zmiennych.

Próbuję przerobić kod (który wykonuje się prawidłowo):
  1. class Klasa
  2. {
  3. public function List()
  4. {
  5. $this->dataBase (x, x, x, x);
  6. $sql = "SELECT * FROM artykul";
  7. $result = mysql_query($sql);
  8. while($row = mysql_fetch_assoc($result))
  9. { .... i tak dalej }
  10. }
  11. }


na następujący:
  1. class Klasa
  2. {
  3. public $sql;
  4. public $result;
  5. public $row;
  6.  
  7. public function sqlQuery($query)
  8. {
  9. $this->sql = $sql;
  10. $this->result = $result;
  11. $sql = $query;
  12. $result = mysql_query($sql);
  13. }
  14.  
  15. public function List()
  16. {
  17. $this->dataBase (x, x, x, x);
  18. $result1 = $this->sqlQuery("SELECT * FROM artykul");
  19. return $result1;
  20. while($row = mysql_fetch_assoc($result))
  21. { .... i tak dalej }
  22. }
  23. }


Niestety w drugim przypadku wywala mi błąd, że funkcja List() nie widzi zmiennej $sql ani $result, chociaż je zrobiłem public.
Jak zrobić, żebym mógł użyć zmiennej $result w funkcij List()?
rocktech.pl
Witam.

Podstawy się kłaniają oop5.properties.

  1.  
  2. public function sqlQuery($query)
  3.  
  4. {
  5. //Tu poczytaj w linku. Co chciałeś robić ?
  6. //$this->sql = $sql;
  7.  
  8. //$this->result = $result;
  9.  
  10. $this->sql = $query;
  11.  
  12. $this->result = mysql_query($this->sql);
  13.  
  14. }
  15.  
  16.  
  17.  
  18. public function List()
  19.  
  20. {
  21.  
  22. $this->dataBase (x, x, x, x);
  23.  
  24. $result1 = $this->sqlQuery("SELECT * FROM artykul");
  25.  
  26. return $result1;
  27.  
  28. while($row = mysql_fetch_assoc($this->result))
  29.  
  30. { .... i tak dalej }
  31.  
  32. }
  33.  
  34. }
marcwars
Dzięki za wyjaśnienia, ale:
1) Później wyniki nie są widziane przez dalszą pętlę foreach (wywala invalid argument dla foreach), wcześniej bez posługiwania się zapytaniem jako funkcją, wszystko było ok.
2) Po lekturze rozumiem, że powinienem zadeklarować
  1. public $row = array();
?
rocktech.pl
Dokładnie tak.
Zapraszam tu po więcej oop5.visibility.
marcwars
To jakaś telepatia, właśnie to przeglądałem- o visibility.

A dlaczego wywaliło mi błąd w foreach?

cały plik teraz:

  1. class Model {
  2. public $sql;
  3. public $result;
  4. public $row = array();
  5.  
  6. public function sqlQuery($query)
  7. {
  8. $this->sql = $query;
  9. $this->result = mysql_query($this->sql);
  10. }
  11.  
  12. public function List ()
  13. {
  14. $this->dataBase (x, x, x, x);
  15.  
  16. $result = $this->sqlQuery("SELECT * FROM artykul");
  17.  
  18. return array($result);
  19.  
  20. while($row = mysql_fetch_assoc($this->result))
  21. {
  22. $out[]=$row;
  23. }
  24. $books = array();
  25. foreach ($out as $art)
  26. {
  27.  
  28. $books[$art['tytul']] = new Book ($art['tytul'], $art['nazwisko'], $art['tekst']);
  29.  
  30. }
  31. return $books;
  32. }



w innym miejscu mam odczytywanie tablicy $books:
  1. foreach ($books as $tytul => $book)
  2. {
  3. echo '<tr><td><a href="index.php?book='.$book->tytul.'">'.$book->tytul.'</a></td><td>'.$book->nazwisko.'</td><td>'.$book->tekst.'</td></tr>';
  4. }


i w w/w pliku po echo wywala mi teraz błąd: "Trying to get property of non-object", a wcześniej było w porządku, czyli jak to rozumieć?
rocktech.pl
No telepatą może i jestem ale jasnowidzem nie smile.gif

Włącz raportowanie błędów jak nie dasz rady dojść to pokaż kod i komunikat błędu.
marcwars
Hmm, wywaliłem wiersz 18:
  1. return array($result);

i bez tego jest w porządku smile.gif
Dzięki.
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.