Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ocena sondy OOP
folt3k
post 9.05.2014, 12:41:08
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 18.02.2014

Ostrzeżenie: (0%)
-----


Witam stworzyłem sonde w metodzie proceduralnej i postanowiłem ją przenieść do OOP. Prosze was o ocenę wykonania tej sondy, bo szczerze mówiąc to nie potrafię zbytnio dostrzec zalet rozwiązania obiektowego, pewnie wszystko jest źle.

  1. <?php
  2.  
  3. class Sonda {
  4.  
  5. public $tablica = array();
  6.  
  7. public function __construct($odp,$cookie,$tablica) {
  8.  
  9. $this->tablica = $tablica;
  10. $this->odp = $odp;
  11. $this->cookie = $cookie;
  12.  
  13. $this->setCookie();
  14. $this->explodeArray();
  15. $this->addPointToBase();
  16. $this->showResults();
  17. }
  18.  
  19. public function setCookie() {
  20. if (isset($this->odp))
  21. setcookie("sonda","1",time()+7*24*3600);
  22. }
  23.  
  24. public function explodeArray() {
  25.  
  26. if ($this->cookie != "1" && !isset($this->odp)) {
  27. echo '<form action="" method="post"><ul id="sonda">';
  28. $array = $this->tablica;
  29. $explode_array = explode(",", $array);
  30.  
  31. for ($i=0;$i<count($explode_array);$i++)
  32. echo '<li><label><input type="radio" name="odp" value="1" id="ankieta_0">'.$explode_array[$i].'</label></li>';
  33. echo '</ul><div><input name="submit" value="Głosuj" type="submit"></div></form>';
  34. }}
  35. public function addPointToBase() {
  36.  
  37. if (isset($this->odp)) {
  38. include("config.php");
  39. $query = mysqli_query($con, 'SELECT odp'.$this->odp.' from sonda');
  40.  
  41. @$result = mysqli_fetch_array($query);
  42. $wynik = $result["odp".$this->odp] + 1;
  43.  
  44. $sql = mysqli_query($con, 'UPDATE sonda SET odp'.$this->odp.'='.$wynik.'');
  45. }}
  46. public function showResults() {
  47.  
  48. if ($this->cookie == "1" || (isset($this->odp))) {
  49. include("config.php");
  50. $query = mysqli_query($con, 'select * from sonda');
  51. $result = mysqli_fetch_array($query);
  52.  
  53. for($this->odp = 1; $this->odp<=6; $this->odp++) {
  54. $sum_votes = $sum_votes + $result['odp'.$this->odp];
  55. }
  56. for ($this->odp = 1; $this->odp<=6; $this->odp++) {
  57. $procent[$this->odp] = round(($result['odp'.$this->odp]/$sum_votes)*100)."%";
  58. }
  59. echo '<ul id="sonda">';
  60. $array = $this->tablica;
  61. $explode_array = explode(",", $array);
  62. for ($this->odp = 1; $this->odp<=6; $this->odp++) {
  63. echo '<li id="wyniksondy">'.$explode_array[$this->odp-1].": <b>".$procent[$this->odp]."</b> (".$result['odp'.$this->odp].")</li>";
  64. }
  65. echo'</ul>';
  66.  
  67. echo '<br>Ilość głosów: <b>'.$sum_votes.'</b>';
  68. }}
  69. }
  70.  
  71. ?>
Go to the top of the page
+Quote Post
Turson
post 9.05.2014, 12:49:31
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Nie generuj htmla w klasie .Nie wygłuszaj błędów, tym bardziej w fetch_array, staraj się nadawać nazwy metodom inne niż domyślnych funkcji czy instrukcji PHP, patrz przykład setCookie. Zastanawiam się po co masz 3 razy tę samą pętlę for.
Go to the top of the page
+Quote Post
Pyton_000
post 9.05.2014, 13:15:20
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Poczytaj np. to:
http://wortal.php.pl/phppl/Wortal/Artykuly...poczatkujacych2
Go to the top of the page
+Quote Post
folt3k
post 9.05.2014, 13:23:54
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 18.02.2014

Ostrzeżenie: (0%)
-----


@Turson - dzięki wielkie, zrealizowałem twoje uwagi, ale rada aby nie generować HTMLa jest dla mnie kompletnie niezrozumiała. To w takim razie jak mam stworzyć sondę w OOP gdy nie mogę stosować HTMLu?

@Pyton - dzięki, zabieram się za czytanie.
Go to the top of the page
+Quote Post
Turson
post 9.05.2014, 13:29:55
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


HTML możesz stosować, ale poza klasą. Poprzeglądaj jakieś przykładowe klasy to zobaczysz jak to wygląda.
Go to the top of the page
+Quote Post
em1X
post 9.05.2014, 19:14:41
Post #6





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


Ocena: 0/5. Dlaczego? Ponieważ to nie jest OOP tylko kod proceduralny zapakowany w klasę i nie ma to nic wspólnego z obiektowością smile.gif


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post
folt3k
post 11.05.2014, 19:30:44
Post #7





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 18.02.2014

Ostrzeżenie: (0%)
-----


Też tak uważam biggrin.gif . A mógłbyś mi powiedzieć w takim ogólnym zarysie jak to mniej więcej powinno wyglądać. I jest w ogóle sens tworzyć sondę w OOP?
Go to the top of the page
+Quote Post
em1X
post 12.05.2014, 16:19:24
Post #8





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


Po co pisać w OOP?
http://pl.wikipedia.org/wiki/Programowanie_obiektowe

Przykład systemu sondy w OOP? Nie podaję szczegołów kodu, ponieważ nie będę go pisał za Ciebie:

  1. $survey = new Survey('Jak oceniasz stronę');
  2. $survey->addAnswer(new Answer(1, 'Kiepsko'));
  3. $survey->addAnswer(new Answer(2, 'Tak sobie'));
  4. $survey->addAnswer(new Answer(3, 'Super'));
  5.  
  6. if (isset($_POST['answers'])) {
  7. $survey->setUserAnswer($_POST['answers']);
  8. }
  9.  
  10. $printer = new HtmlPrinter();
  11. echo $survey->display($printer);


Ten post edytował em1X 12.05.2014, 16:20:55


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.06.2025 - 02:18