Aquarium Liter class

Freiwie

Grünschnabel
Hallo zusammen, beschäftige mich aktuell mit einem kleinen Klassenscript für mein Aquarium
Das Becken hat ein Fassungsvermögen von 200 Litern, das Überlaufbecken hat 70 Liter.
Die variable Wasser/ Osmosewasser variiert unabhängig.
Möchte eigentlich nur die genaue Liter Wasser im Überlaufbecken ausgegeben bekommen.

Wenn Zuviel Wasser ins Aquarium läuft geht die Zahl wie kann ich das verhindern?
Mein Script funktioniert bereits weiß aber nicht ob ich alles es richtig umgesetzt habe, oder wäre da eine einfache if else Anweisung sinnvoller?
Irgendwie habe ich grade eine denkblockade :-/
Bin um jeden rat dankbar!


Mfg Torben

Hier mal mein code

PHP:
<?php
class tank
{
    var $wasser;
    var $aquarium;
    var $becken;
    
    function set_wasser($wasser, $aquarium, $becken)
    {
        $this->wasser   = $wasser;
        $this->aquarium = $aquarium;
        $this->becken   = $becken;
    }
    public function rechnung($wasser, $aquarium, $becken)
    {
        //return $wasser;
        //return $aquarium;
        //return $becken;
        $rest = $aquarium - $wasser;
        
        if ($rest >= 0) {
            
            echo "Das Aquarium wurde gefüllt mit $wasser Litern Wasser.";
            
            $wasserneuimbecken = $becken + $rest;
            echo "<br>";
            echo " Im Auffangbecken sind noch $becken Liter verfügbar ";
            
        }
        
        elseif ($rest < 0) {
            
            echo "Das Wasser passt nicht in das Aquarium";
            echo "$rest Liter gehen in das Auffangbecken.";
            $wasserneuimbecken = $becken + $rest;
            echo "<br>";
            echo "Im Auffangbecken  sind noch $wasserneuimbecken Liter verfügbar!";
        }
        
        else {
            //
            
        }
        
    }
}

$instanz = new tank();

$wasser   = 207; // liter
$aquarium = 200; //liter
$becken   = 70; //liter

$instanz->rechnung($wasser, $aquarium, $becken);
?>
 

Zvoni

Erfahrenes Mitglied
Da ist ein Logik-Fehler
PHP:
$wasser = 190;
$aquarium = 200;

Code springt in den ersten If-Zweig (Zeile 21) weil $rest>0 ist, und du bekommst für $wasserneuimbecken = 80 ($becken + $rest)

Der code für "Überfüllen" sieht korrekt aus.

Was deine Frage betrifft (wieviel Wasser ist im Überlaufbecken):
Nimm ne Variable, welche du mit 0 initialisierst und dann hochsummierst
var $überlauf = 0;

$überlauf=$überlauf + $rest (Aufpassen, dass du positiven rest hast oder subtrahieren anstatt addieren)
 
Zuletzt bearbeitet von einem Moderator:

Freiwie

Grünschnabel
Hallo @Zvoni,

erst einmal vielen lieben dank für deine schnelle Antwort und Hilfe, meinst du das hochsummieren also hochzählen mit einer while-schleife?
 

Zvoni

Erfahrenes Mitglied
Nein, einmal pro "Wasser einfüllen" oder wie auch immer du das machst.

Die Variable sollte dann aber irgendwie static sein (bin kein PHP-ler): Heisst, sie behält ihren Wert, auch wenn der Code irgendwo anderst gerade rumturnt
 

Freiwie

Grünschnabel
Hab es jetzt etwas anderes gelöst hab einfach die elseif Bedingungen abgeändert.

Sollte jemand eine bessere Möglichkeit haben immer her damit :)

PHP:
<?php
 class tank{
   var $wasser;
   var $aquarium;
   var $becken;

   function set_wasser($wasser,$aquarium,$becken){
      $this->wasser = $wasser;
      $this->aquarium = $aquarium;
      $this->becken = $becken;
   }
public function rechnung($wasser,$aquarium,$becken){
//return $wasser;
//return $aquarium;
//return $becken;
$rest = $aquarium - $wasser;
$wasserneuimbecken = $becken + $rest;
if ($rest >= 0){

    echo "Das Aquarium wurde gefüllt mit $wasser Litern Wasser.";

    $wasserneuimbecken = $becken + $rest;
    echo "<br>";       
    echo  " Im Auffangbecken sind noch $becken Liter verfügbar ";
  
}

elseif ($rest < 0 & $wasserneuimbecken >= 0){
    
    echo "Das Wasser passt nicht in das Aquarium";
    echo "$rest Liter gehen in das Auffangbecken.";
    
    echo "<br>";
    echo "Im Auffangbecken  sind noch $wasserneuimbecken Liter verfügbar!";
}

else {
echo "Das Auffangbecken ist übergelaufen!!!";

}

}}

$instanz = new tank();

$wasser  = 270; // liter
$aquarium = 200; //liter
$becken  = 70; //liter

$instanz->rechnung($wasser,$aquarium,$becken);
?>
 

Freiwie

Grünschnabel
So da bin ich noch mal, hab das script noch mal abgeändert, und möchte gerne in der index Datei nur die variable aus $var ausgeben mit echo kommt die Variable ist nicht definiert und eine Globalisierung (global $var1) in der class Datei ist auch nicht möglich?

Mit return $var wird nichts ausgegeben

Hier der Code
Class.php

PHP:
<?php

 class tank {

    var $wasser;
    var $aquarium;
    var $becken;

    function set_wasser($wasser,$aquarium,$becken){
        $this->wasser = $wasser;
        $this->aquarium = $aquarium;
        $this->becken = $becken;
    }

    public function rechnung($wasser,$aquarium,$becken){

        //return $wasser;
        //return $aquarium;
        //return $becken;

        $rest = $aquarium - $wasser;

        $wasserneuimbecken = $becken + $rest;

        if ($rest >= 0){
            $var = $becken;
        }
        elseif ($rest < 0 & $wasserneuimbecken >= 0){
            $var = $wasserneuimbecken;
        }
        else {
            $var = 0
        }
    }
}
?>

Index.php

PHP:
<?php
require_once('class.php');
$instanz = new tank();

$wasser  = 270; // liter
$aquarium = 200; //liter
$becken  = 70; //liter

$instanz->rechnung($wasser,$aquarium,$becken);
?>
 
Zuletzt bearbeitet von einem Moderator:

Jan-Frederik Stieler

Monsterator
Moderator
Hi,
Du hast in Zeile 32 ein schließendes `;` vergessen.
Wenn Du `$var` ausgegeben haben willst musst Du ein `echo` vor `$instanz->rechnung(…);` machen.

Bei reinen PHP-Scripten in einer Datei ist es ratsam das schließende PHP-tag wegzulassen:
PHP: Die Trennung von Anweisungen - Manual (siehe grauen Hinweis).
In Scripten `$var` und `class` oder `$instanz` als Bezeichner zu verwenden ist nicht so ideal, ich geh mal davon aus das Du das hier verwendet hast weils so ein kleines Script ist. Ich bin eher ei nverfechter von sprechenden Deklarationen.

Viele Grüße