Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Klasa użytkownika
Forum PHP.pl > Forum > Przedszkole
diamondking
Cześć.

Ostatnio czytam o klasach/funkcjach.
Chciałem stworzyć klasę, która by zwracała wyniki na podstawie danego ID.
Stworzyłem coś takiego:

  1. function user($i) {
  2. global $baza;
  3. $zapytanie = $baza->query("SELECT login, username, avatar, email, gwiazdki FROM users WHERE id = ".$i);
  4. $gracz = $zapytanie->fetch();
  5. $out['id'] = $i;
  6. $out['login'] = $gracz['login'];
  7. $out['username'] = $gracz['username'];
  8. $out['email'] = $gracz['email'];
  9. $out['gwiazdki'] = $gracz['gwiazdki'];
  10.  
  11. if(empty($gracz['avatar'])){
  12. $out['avatar'] = 'avatars/noimage.png';
  13. }else{
  14. $out['avatar'] = ''.$gracz['avatar'].'';
  15. }
  16.  
  17. return $out;
  18. }


niby działa ale chyba kiedyś widziałem gdzieś inne rozwiązanie.
Co sądzicie zostawić tak czy polecacie mi inny sposób?
Dziękuję za pomoc.
SmokAnalog
Mówisz o klasie, a to zwykła funkcja smile.gif

Ogólnie takie pobieranie po ID jest popularnym rozwiązaniem w bibliotekach będących warstwą abstrakcji dla bazy danych, ale w Twoim kodzie jest kilka problemów. Przede wszystkim zobacz sobie prepared statements, żeby Twój kod nie był podatny na SQL Injection. Nie powinieneś tak wstawiać $id z parametru do zapytania. Po drugie, polecam unikać global, bo to się prosi o problemy. Zamiast tego możesz np. przekazywać instancję bazy jako parametr albo mieć singleton (poczytaj o tym). A w idealnym przypadku możesz użyć bardziej zaawansowanych technik wstrzykiwania zależności (Dependency Injection).

Możesz też uprościć kod z $out, bo klucze się pokrywają. Zamiast linii 5-17 wystarczy jedna:

  1. return ['avatar' => $user['avatar'] ?: 'avatars/noimage.png'] + $user;
trueblue
Cytat(SmokAnalog @ 5.10.2020, 16:40:42 ) *
Możesz też uprościć kod z $out, bo klucze się pokrywają. Zamiast linii 5-17 wystarczy jedna:
  1. return ['avatar' => $user['avatar'] ?: 'avatars/noimage.png'] + $user;

Przy okazji dodaj w zapytaniu wybór id, czyli: "SELECT id, login, username, avatar, email, gwiazdki", wtedy zmienna $gracz będzie zawierać wszystkie pola z pierwotnego kodu.

P.S. Zamiast $user powinno być $gracz (w kodzie SmokAnalog).
SmokAnalog
Też zauważyłem to $gracz po fakcie, ale sugerowałbym jednak nazwę $user, bo po pierwsze nazwa funkcji nie wskazuje, że chodzi o jakichś graczy, a po drugie mieszanie polskiego z angielskim w kodzie jest ble. To uwagi do kolegi diamentowego króla, bo drugi kolega zapewne to już wie.
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.