Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] obiektowe - czy idę w dobrym kierunku?
Forum PHP.pl > Forum > Przedszkole
Th0e
Witam! Zacząłem się uczyć programowania obiektowego. Zrobiłem grę w nożyce papier, którą starałem się napisać obiektowo.

Moje pytanie - czy idę w dobrym kierunku?

  1. <?php
  2. class gra
  3. {
  4. function wybierz()
  5. {
  6. echo '<form method="POST">
  7. <select name="wybierz">
  8. <option>Kamien</option>
  9. <option>Nozyce</option>
  10. <option>Papier</option>
  11. </select>
  12. <input type="submit" value="wyslij">
  13. </form>
  14. ';
  15. }
  16. function walka()
  17. {
  18.  
  19. $wrog = rand(1,3);
  20. $ty = $_POST['wybierz'];
  21.  
  22. switch($wrog)
  23. {
  24. case 1:
  25. $wrog ="Nozyce";
  26. break;
  27.  
  28. case 2:
  29. $wrog ="Kamien";
  30. break;
  31.  
  32. case 3:
  33. $wrog ="Papier";
  34. break;
  35. }
  36. if($ty == "Nozyce" && $wrog =="Papier" OR $ty =="Kamien" && $wrog=="Nozyce" OR $ty =="Papier" && $wrog=="Kamien")
  37. {
  38. echo'Wybrałeś '.$ty.'&nbsp; &nbsp; Natomiast przeciwnik wybrał '. $wrog .'<br /> Wygrałeś!';
  39. }
  40. else
  41. {
  42. echo'Wybrałeś '.$ty.'&nbps; &nbsp; Natomiast przeciwnik wybrał '. $wrog .'<br /> Przegrałeś...';
  43. }
  44. }
  45. }
  46.  
  47. $gra = new gra();
  48.  
  49. $gra->wybierz();
  50. $gra->walka();
  51. ?>
Szymciosek
  1. <?php
  2. class Gra //nazwy klas z dużej litery
  3. {
  4. public function wybierz() //podajemy modyfikator metody
  5. {
  6. echo '<form method="POST">
  7. <select name="wybierz">
  8. <option>Kamien</option>
  9. <option>Nozyce</option>
  10. <option>Papier</option>
  11. </select>
  12. <input type="submit" value="wyslij">
  13. </form>
  14. ';
  15. }
  16.  
  17. public function walka()
  18. {
  19.  
  20. $wrog = rand(1,3);
  21. $ty = $_POST['wybierz'];
  22.  
  23. switch($wrog)
  24. {
  25. case 1:
  26. $wrog ="Nozyce";
  27. break;
  28.  
  29. case 2:
  30. $wrog ="Kamien";
  31. break;
  32.  
  33. case 3:
  34. $wrog ="Papier";
  35. break;
  36. }
  37.  
  38. if($ty == "Nozyce" && $wrog =="Papier" || $ty =="Kamien" && $wrog=="Nozyce" || $ty =="Papier" && $wrog=="Kamien") //Nie ma OR i AND, jest za to: OR = || i AND = &&
  39. {
  40. echo 'Wybrałeś '.$ty.'&nbsp; &nbsp; Natomiast przeciwnik wybrał '. $wrog .'<br /> Wygrałeś!'; //spacja po echo
  41. }
  42. else
  43. {
  44. echo 'Wybrałeś '.$ty.'&nbps; &nbsp; Natomiast przeciwnik wybrał '. $wrog .'<br /> Przegrałeś...';
  45. }
  46. }
  47. }
  48.  
  49. $gra = new Gra(); //odwołujemy się do klasy, którą poprawiłem na dużą literę
  50.  
  51. $gra->wybierz();
  52. $gra->walka();
  53. ?>


Ogólnie jest ok, uwagi masz w komentarzach.
Modyfikatory stosujemy żeby określić możliwość dostępu do metod klasy z zewnątrz.
viking
Cytat
//Nie ma OR i AND, jest za to: OR = || i AND = &&

A co to za teoria?
http://www.php.net/manual/en/language.oper....precedence.php

&& i || są silniejsze niż AND i OR. W pewnych sytuacjach ich odpowiednie użycie ma sens. Do takiego kodu klasa nie jest potrzebna wcale. Raczej można by wydzielić klasę do obsługi parametrów od użytkownika czyli POST, GET i odpowiednia walidacja, walka ($input1, $input2) gdzie input to był by wybór pochodzący od różnych użytkowników. Ze zmiennej $wrog można by zrobić jakieś stałe a wręcz prosi się o eksperymentalny SPLEnum (przy okazji poznasz SPL) - wtedy zamiast ciągle powtarzać papier, kamień, nożyce (łatwo zrobić literówkę) tylko np WROG::1
!*!
Cytat
Moje pytanie - czy idę w dobrym kierunku?

Nie. Metoda (brakuje też odpowiednich flag np. public private, protected) w klasie ma zwracać wynik jako return, a nie wyświetlać go przez echo.
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.