Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][OOP]Brak efektu przy próbie wywołania metody
Forum PHP.pl > Forum > Przedszkole
Kerth
Witam,
chcę "przerobić" mój kod strukturalny na obiektowy. Miałem się już dawno za to brać ale chęci mi nie pozwalały smile.gif Kod dotyczy pobierania liczby nowych, nieprzeczytanych prywatnych wiadomości jeśli takowe istnieją. Liczba pojawia się w nawiasie np. "PrivateMessage(5)".

Tak wygląda aktualny kod:
  1. <?php
  2.  
  3. if(isset($_SESSION['zalogowany'])){
  4. echo '
  5. <li>Zakładka1</a></li>
  6. <li>Zakładka2</li>
  7. <li>Zakładka3</li>
  8. ';
  9. //wywołanie klasy
  10. $connect_class_pm = new PrivateMessage();
  11. $connect_class_pm->setDb($db);
  12. $connect_class_pm->GetPrivateMessage();
  13.  
  14. var_dump($row_last_topic); //zwraca NULL
  15. if(!$read_message){
  16. echo '<li><a href="private_message">Private message</a></li>';
  17. }else{
  18. echo '<li><a href="private_message">Private message <span class="black"><span class="pogrub">('.$data_read_message['ilosc'].')</span></span></a></li>';
  19. }
  20. }else{
  21. echo '
  22. <li class="active"><a href="forum">Zakładka1</a></li>
  23. <li><a href="forum/userpanel">Zakładka2</a></li>
  24. ';
  25. }
  26. ?>

Plik GetPrivateMessage.class.php wygląda tak:
  1. <?php
  2. class PrivateMessage extends DatabaseManipulator {
  3. public function GetPrivateMessage() {
  4. $read_message = $this->getPdo()->prepare("SELECT COUNT(`przeczytane_pw`) AS `ilosc` FROM `wiadomosci_pw` WHERE `wiadomosc_do` = :nick_odbiorcy AND przeczytane_pw = 0");
  5. $read_message->bindValue(":nick_odbiorcy", $_SESSION['nick'], PDO::PARAM_STR);
  6. if(!$read_message->execute()){
  7. throw new Exception("Błąd zapytania");
  8. }else{
  9. $data_read_message = $read_message->fetch();
  10. $read_message = $data_read_message['ilosc'];
  11. }
  12. }
  13. }
  14. ?>

Nie powoduje on błędów, jednakże nic nie zwraca. Nie zwraca liczby wiadomości jak to było w przypadku kodu strukturalnego. Co dziwne, w taki sam sposób wywołuję instancje w innych plikach np. przy logowaniu. Wszystko ładnie się pobiera z bazy, dane etc.

Wcześniej było w ten sposób i działało bez zarzutów.

  1. <?php
  2.  
  3. if(isset($_SESSION['zalogowany'])){
  4. echo '
  5. <li>Zakładka1</a></li>
  6. <li>Zakładka2</li>
  7. <li>Zakładka3</li>
  8. ';
  9. $read_message = $db->prepare("SELECT COUNT(`przeczytane_pw`) AS `ilosc` FROM `wiadomosci_pw` WHERE `wiadomosc_do` = :nick_odbiorcy AND przeczytane_pw = 0");
  10. $read_message->bindValue(":nick_odbiorcy", $_SESSION['nick'], PDO::PARAM_STR);
  11. if(!$read_message->execute()){
  12. throw new Exception("Błąd zapytania");
  13. }else{
  14. $data_read_message = $read_message->fetch();
  15. $read_message = $data_read_message['ilosc'];
  16. }
  17.  
  18. if(!$read_message){
  19. echo '<li><a href="private_message">Private message</a></li>';
  20. }else{
  21. echo '<li><a href="private_message">Private message <span class="black"><span class="pogrub">('.$data_read_message['ilosc'].')</span></span></a></li>';
  22. }
  23. }else{
  24. echo '
  25. <li class="active"><a href="forum">Zakładka1</a></li>
  26. <li><a href="forum/userpanel">Zakładka2</a></li>
  27. ';
  28. }
  29. ?>


Wie może ktoś w czym jest problem?
nospor
Zeby funkcja cokolwiek zwracala, to musi posiadać magiczne słowo RETURN... moze zamiast za obiektowke, poducz się wpierw ze strukturalnego bo na tym jeszcze lezysz.
http://php.net/manual/en/functions.returning-values.php

I majac juz tyle postow moglbys juz naprawde nauczyc sie wyswietlac wszystkie bledy, to bys widzial czemu ci sie nic nie wyswietla.... Tu masz napisane jak:
Temat: Jak poprawnie zada pytanie
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.