Xxy
Xxy

Reputation: 123

php object oriented calculator

Hello im trying to make an object as learning task which takes a number and calculate it three times and echos every step.

<?

// neues Objekt der Klasse erzeugen
$stringManager = new StringManager();

// output String initialisieren
$meinString = "";
$zahl = "100";
$stringManager->setMeinString($meinString);
$stringManager->setZahl($zahl);

// Schritte ausführen
for ($i=1; $i<=3; $i++) {
  $stringManager->machSchritt($i,$zahl);
}

// String ausgeben
echo $stringManager->getMeinString();

// Klasse StringManager
class StringManager {
  var $meinString;
  var $zahl;

  function StringManager() {
  }

  function machSchritt($welchenSchritt,$zahl) {
    switch ($welchenSchritt) {
      case 1:
        $zahl + 50;
        break;
      case 2:
        $zahl / 2;
        break;
      case 3:
        $zahl * 5;
        break;
      default:
        break;
    }
    $this->append("schritt".$welchenSchritt." fertig...");
    $this->append("Zahl:".$zahl." ");
  }

  function append($what) {
    $this->meinString .= $what;
  }
  //function append($what) {
    //$this->zahl .= $what;
  //}
  function setMeinString($value) {
    $this->meinString = $value;
  }

  function getMeinString() {
    return $this->meinString;
  }

  function setZahl($value) {
    $this->zahl = $value;
  }

  function getZahl() {
    return $this->zahl;
  }
}

?>

My output is: "schritt1 fertig...Zahl:100 schritt2 fertig...Zahl:100 schritt3 fertig...Zahl:100"

But I expect it to be "schritt1 fertig...Zahl:150 schritt2 fertig...Zahl:75 schritt3 fertig...Zahl:375

Please help me find what im doing wrong.

Upvotes: 0

Views: 74

Answers (1)

rob
rob

Reputation: 2296

your problem is between this lines:

    $zahl + 50;
    break;
  case 2:
    $zahl / 2;
    break;
  case 3:
    $zahl * 5;

if you want to increase/manipulate the variable $zahl so you have to use it:

    $zahl += 50;
    break;
  case 2:
    $zahl /= 2;
    break;
  case 3:
    $zahl *= 5;

btw: your code is deprecated.

class StringManager {
  var $meinString;
  var $zahl;

  function StringManager() {
  }
}

should replace with

class StringManager {
  private $meinString;
  private $zahl;

  public function __construct() {
  }
}

update:

ah, now i understand, you need to work with your value. so use this instead:

    $this->zahl += 50;
    break;
  case 2:
    $this->zahl /= 2;
    break;
  case 3:
    $this->zahl *= 5;

$this->append("Zahl:".$this->zahl." ");

But it would be better, to use your setter (with typecasting) and getter methods.

warning your code looks like php4 code. php4 is not supported since 2008 (http://php.net/eol.php).

Upvotes: 2

Related Questions