Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zwracanie (wartości?) przez funkcję
Forum PHP.pl > Forum > PHP
bliitz
Witam
Powiedzmy że jest przykładowa funkcja w postaci:
  1. <?php
  2. function aktualizujTabele($nazwaKlubu, $punkty, $punktyZdobyte,
  3.  $punktyStracone,$kolejka, $idKlubu) {
  4. global $lacz;
  5. $nazwaKlubu = safeOutput($nazwaKlubu);
  6. $punkty = safeOutput($punkty);
  7. $punktyZdobyte = safeOutput($punktyZdobyte);
  8. $punktyStracone = safeOutput($punktyStracone);
  9. $kolejka = safeOutput($kolejka);
  10. $idKlubu = intval($idKlubu);
  11.  
  12. if (!preg_match('/^-?[0-9]+$/', $punkty)) {
  13. return 0;
  14. } elseif (!preg_match('/^[0-9]+$/', $punktyZdobyte)) {
  15. return 0;
  16. } elseif (!preg_match('/^[0-9]+$/', $punktyStracone)) {
  17. return 0;
  18. } elseif (!preg_match('/^[0-9]+$/', $kolejka)) {
  19. return 0;
  20. } elseif (!$nazwaKlubu) {
  21. return 0;
  22. } else {
  23. $aktualizuj = "UPDATE `tabela` SET `nazwa_klubu` = '$nazwaKlubu', "
  24. . "`kolejka` = '$kolejka', `punkty` = '$punkty', "
  25. . "`punkty_zdobyte` = '$punktyZdobyte', "
  26. . "`punkty_stracone` = '$punktyStracone' "
  27. . "WHERE `id_klubu` = '$idKlubu' ";
  28. if (mysql_query ($aktualizuj, $lacz)) {
  29. return 1;
  30. } else {
  31. return 0;
  32. }
  33. }
  34. }
  35. ?>

Jako, że funkcje nie powinny nic wypisywać czy właściwe jest zastosowanie po zapytaniu mysql_query fragmetu or die z komunikatem, czy tak jak jest zwracając wartość?
W przypadku pokazanym wyżej nie mogę uzależnić komunikatu błędu od zwracanej wartości, czy to jest błąd złych danych wprowadzonych przez użytkownika czy błąd bazy danych.
Proszę o wskazówkę bo zwracanie wartości w postaci return0, 1, 2, 3 itp. nie jest chyba właściwą praktyką?
Cysiaczek
Możesz dodawać nowe zwracane wartości 1,2,3,4,5 ... n i je obsługiwać. Dobrą praktyką jest jednak zwracanie po prostu true|false, a w razie poważniejszych błędów - rzucanie wyjątkami.

  1. <?php
  2. function doSomething()
  3. {
  4. if(1!==2)
  5. {
  6. throw new Exception('Error');
  7. }
  8. }
  9.  
  10. try
  11. {
  12. doSomething();
  13. }
  14. catch(Exception $e)
  15. {
  16. print $e->getMessage();
  17. }
  18. ?>


Pozdrawiam.
bliitz
  1. <?php
  2. function output($string)
  3. {
  4. print '<p class="ostrzezenia">'.$string.'</p>';
  5. }
  6.  
  7. function aktualizujTabele($nazwaKlubu, $punkty, $punktyZdobyte,
  8.  $punktyStracone,$kolejka, $idKlubu) {
  9. global $lacz;
  10. $nazwaKlubu = safeOutput($nazwaKlubu);
  11. $punkty = safeOutput($punkty);
  12. $punktyZdobyte = safeOutput($punktyZdobyte);
  13. $punktyStracone = safeOutput($punktyStracone);
  14. $kolejka = safeOutput($kolejka);
  15. $idKlubu = intval($idKlubu);
  16.  
  17. if (!preg_match('/^-?[0-9]+$/', $punkty)) {
  18. throw new Exception ('Zła wartość w polu punkty.');
  19. } elseif (!preg_match('/^[0-9]+$/', $punktyZdobyte)) {
  20. throw new Exception ('Zła wartość w polu punkty +.');
  21. } elseif (!preg_match('/^[0-9]+$/', $punktyStracone)) {
  22. throw new Exception ('Zła wartość w polu punkty -.');
  23. } elseif (!preg_match('/^[0-9]+$/', $kolejka)) {
  24. throw new Exception ('Zła wartość w polu kolejka.');
  25. } elseif (!$nazwaKlubu) {
  26. throw new Exception ('Zła wartość w polu klub.');
  27. } else {
  28. $aktualizuj = "UPDATE `tabela` SET `nazwa_klubu` = '$nazwaKlubu', "
  29. . "`kolejka` = '$kolejka', `punkty` = '$punkty', "
  30. . "`punkty_zdobyte` = '$punktyZdobyte', "
  31. . "`punkty_stracone` = '$punktyStracone' "
  32. . "WHERE `id_klubu` = '$idKlubu' ";
  33. if (mysql_query ($aktualizuj, $lacz)) {
  34. return output('Wprowadzono zmiany.');
  35. } else {
  36. throw new Exception ('Błąd bazy danych.');
  37. }
  38. }
  39. }
  40. ?>

czy coś takiego jest poprawne?
co prawda pierwsza funkcja wypisuje tekst, ale jest to jedyna czynność jaką wykonuje.
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.