Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Kalkulator OOP
miras
post 29.03.2013, 12:02:43
Post #1





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


Witam, czas najwyższy przerzucić się na OOP, a więc zacząłem standardowo od napisania kalkulatora i (najpierw kod)

index.php :

  1.  
  2. <form method="POST" action="">
  3. <input type="number" name="pierwsza" value=""/>
  4. <select name="dzialanie">
  5. <option value="+">+</option>
  6. <option value="-">-</option>
  7. <option value="*">*</option>
  8. <option value=":">:</option>
  9. </select>
  10. <input type="number" name="druga" value=""/>
  11. <br><br>
  12. <input type="submit" value="Oblicz"/>
  13. </form>
  14.  
  15. <?php
  16. include('kalkulator.class.php');
  17. $kalkulator = new kalkulator;
  18. echo $kalkulator -> oblicz($_POST['pierwsza'],$_POST['druga'],$_POST['dzialanie']);
  19. ?>




kalkulator.class.php


  1. <?php
  2. class kalkulator {
  3. public function oblicz($pierwsza, $druga, $dzialanie) {
  4. $this->wynik = $pierwsza + $druga;
  5. return $this->wynik;
  6. }
  7. }
  8.  
  9. ?>


i teraz tak: powyższy kod działa, z tym, że na stałe jest wpisane dodawanie, a ja chciałbym zrobić jakieś warunki if($_POST['dzialanie']=="-") to odejmowanie itd, niestety nie wiem jak stworzyć w OOP warunki, a drugie pytanie czy ten kod, który wstawiłem ma w ogóle coś wspólnego z OOP ? ;>

Dzięki z góry...


--------------------
Go to the top of the page
+Quote Post
nospor
post 29.03.2013, 12:12:28
Post #2





Grupa: Moderatorzy
Postów: 36 477
Pomógł: 6301
Dołączył: 27.12.2004




Cytat
niestety nie wiem jak stworzyć w OOP warunki
A co ma warunek wspólnego z OOP?? Nic.... Do robienia warunków używa się IF, niezależnie czy to OOP czy nie..... IF chyba umiesz używac?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
falcon85
post 29.03.2013, 12:16:03
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 1
Dołączył: 26.07.2012

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


  1. class kalkulator {
  2. public function oblicz($pierwsza, $druga, $dzialanie) {
  3. if ($dzialanie == "+") {
  4. $wynik = $pierwsza + $druga;
  5. } elseif ($dzialanie == "-") {
  6. $wynik = $pierwsza - $druga;
  7. }
  8. return $wynik;
  9. }
  10. }


Ten post edytował falcon85 29.03.2013, 12:16:46
Go to the top of the page
+Quote Post
miras
post 29.03.2013, 12:17:42
Post #4





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


Ok, dzięki Wam w takim razie, myślałem, że w OOP robi się to jakoś inaczej... facepalmxd.gif


--------------------
Go to the top of the page
+Quote Post
devbazy
post 29.03.2013, 12:18:28
Post #5





Grupa: Zarejestrowani
Postów: 93
Pomógł: 4
Dołączył: 10.08.2009

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


Warunki OOP? Co masz na myśli? Warunki masz wszędzie takie same bez względu na to czy piszesz strukturalnie czy obiektowo. Warunek to warunek. Jeżeli zaś chodzi o Twoją klasę, to utwórz sobie więcej metod np. "dodaj", "odejmij" etc. W pliku index.php sprawdzaj jaki operator został wybrany i wywołuj odpowiednią metodę z klasy "kalkulator". Prosty przykład:

index.php

  1. <form method="POST" action="">
  2. <input type="number" name="pierwsza" value=""/>
  3. <select name="dzialanie">
  4. <option value="+">+</option>
  5. <option value="-">-</option>
  6. <option value="*">*</option>
  7. <option value=":">:</option>
  8. </select>
  9. <input type="number" name="druga" value=""/>
  10. <br><br>
  11. <input type="submit" value="Oblicz"/>
  12. </form>
  13.  
  14. <?php
  15. include('kalkulator.class.php');
  16. $kalkulator = new kalkulator;
  17.  
  18. switch($_POST['dzialanie'])
  19. {
  20. case '+':
  21. echo $kalkulator->dodaj($_POST['pierwsza'], $_POST['druga']);
  22. break;
  23.  
  24. case '-':
  25. echo $kalkulator->odejmij($_POST['pierwsza'], $_POST['druga']);
  26. break;
  27.  
  28. // etc
  29. }
  30. ?>


kalkulator.class.php

  1. <?php
  2. class kalkulator {
  3.  
  4. public function dodaj($a, $b) {
  5. // jakieś instrukcje
  6. }
  7.  
  8. public function odejmij($a, $b) {
  9. // jakieś instrukcje
  10. }
  11. }
  12.  
  13. ?>
Go to the top of the page
+Quote Post
g2g3
post 29.03.2013, 13:10:02
Post #6





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 24.03.2013

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


Cytat(devbazy @ 29.03.2013, 12:18:28 ) *
Warunki OOP? Co masz na myśli? Warunki masz wszędzie takie same bez względu na to czy piszesz strukturalnie czy obiektowo. Warunek to warunek. Jeżeli zaś chodzi o Twoją klasę, to utwórz sobie więcej metod np. "dodaj", "odejmij" etc. W pliku index.php sprawdzaj jaki operator został wybrany i wywołuj odpowiednią metodę z klasy "kalkulator". Prosty przykład:

<?php
include('kalkulator.class.php');
$kalkulator = new kalkulator;

switch($_POST['dzialanie'])
{
case '+':
echo $kalkulator->dodaj($_POST['pierwsza'], $_POST['druga']);
break;

case '-':
echo $kalkulator->odejmij($_POST['pierwsza'], $_POST['druga']);
break;

// etc
}
?>
[/php]


Ty chyba sobie żartujesz z tym switchem.

  1.  
  2. class Kalkulator {
  3.  
  4. protected $liczba1;
  5. protected $liczba2;
  6.  
  7. // W komentarzu tylko liczby.
  8. public function __construct( $liczba1, $liczba2)
  9. {
  10. $this->liczba1 = $liczba1;
  11. $this->liczba2 = $liczba2;
  12. }
  13.  
  14. public function dodawanie()
  15. {
  16. return $this->liczba1 + $this->liczba2;
  17. }
  18.  
  19. public function odejmowanie()
  20. {
  21. return $this->liczba1 - $this->liczba2;
  22. }
  23.  
  24. // itd.
  25. }
  26.  


Ten post edytował g2g3 29.03.2013, 13:11:09
Go to the top of the page
+Quote Post
PrinceOfPersia
post 29.03.2013, 18:55:02
Post #7





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


switch też może być...

ważniejsze to chyba zwalidować. Coś na kształt:
$pierwsza = intval($_POST['pierwsza'])
albo
$pierwsza = floatval($_POST['pierwsza'])
wtedy upewniamy się, że na pewno będziemy operować na liczbach (bo użytkownik może cokolwiek wpisać, nawet jakieś głupoty).

Ten post edytował PrinceOfPersia 29.03.2013, 18:56:03


--------------------
Go to the top of the page
+Quote Post
devbazy
post 29.03.2013, 19:19:24
Post #8





Grupa: Zarejestrowani
Postów: 93
Pomógł: 4
Dołączył: 10.08.2009

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


@g2g3: widzę, że specjalista się trafił. Powiedz co jest złego w podanym przeze mnie przykładzie?

@PrinceOfPersia: zamiast korzystać z funkcji "intval()", lepiej rzutować te zmienne na inta imo.

Walidacja to podstawa, ale o to trzeba się już samemu postarać.

@Down: Podałem jeden ze sposobów rozwiązania problemu i nigdzie nie napisałem, że tak się powinno pisać obiektowo, także oszczędź sobie te durne komentarze, bo się ośmieszasz. Poza tym, interesujące jest to, że potrafisz określić czyjąś wiedzę po przeczytaniu kilku wypowiedzi na forum, zdumiewające. Polecam iść się mądrzyć gdzie indziej, panie "ekspert". Dyskusję uważam za zamknięta, nie mam zamiaru offtopować, a w dodatku szkoda mi czasu na takich delikwentów smile.gif

Ten post edytował devbazy 30.03.2013, 16:30:13
Go to the top of the page
+Quote Post
g2g3
post 30.03.2013, 14:10:57
Post #9





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 24.03.2013

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


Cytat(devbazy @ 29.03.2013, 19:19:24 ) *
@g2g3: widzę, że specjalista się trafił. Powiedz co jest złego w podanym przeze mnie przykładzie?

@PrinceOfPersia: zamiast korzystać z funkcji "intval()", lepiej rzutować te zmienne na inta imo.

Walidacja to podstawa, ale o to trzeba się już samemu postarać.


To co napisałeś w ogóle mija się z pisaniem obiektowym, mądrujesz się, a wiedzy brak. Uwierz, mam większe doświadczenie.

Kolega który to propsuje chyba ma podobnie.
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: 11.06.2024 - 07:12