Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Kalkulator OOP
Forum PHP.pl > Forum > Przedszkole
miras
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...
nospor
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?
falcon85
  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. }
miras
Ok, dzięki Wam w takim razie, myślałem, że w OOP robi się to jakoś inaczej... facepalmxd.gif
devbazy
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. ?>
g2g3
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.  
PrinceOfPersia
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).
devbazy
@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
g2g3
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.
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.