PHP OOP, Werte werden nicht in den Eigenschaften gespeichert.

  • Hey,


    ich habe in oop was programmiert, was Gesamtkosten und die Gesamtdauer zurückgeben soll.


    Wenn ich diese beiden Punkte ohne function und Eigenschaften mache, dann geht das auch, nur wenn ich nun die value der Gesamtkosten und Gesamtdauer in deren passenden Eigenschaften speichern möchte, wird es nicht gemacht. Verstehe nicht warum.


    Mein Code:

    Wenn ich getBookedDays() und getTotalCost() ausgeben möchte wird nix ausgegeben.


    Hoffe ihr könnt mir helfen.


    Stef

  • Das ist aber nicht der ganze Code...


    Bekommst du irgendwelche Fehler?


    Was du auf jeden Fall beachten musst, ist, dass alle Attribute/Eigenschaften, die du mit $this->attributname aufrufst, auch oben in der Klasse definiert sein müssen.

  • Der ganze Code ist 500 Zeilen lang.


    Nein bekomme keine Fehler. Habe ja schon gedebugt.


    Wenn ich diese Werte ohne function und eigenschaft weiterverarbeite funktioniert es ja. Nur möchte ich aufgrund Sauberkeit des Codes, da ich diese 2 Angaben auch in ner anderen Function brauche, diese in den eigenschaften speichern.


    Eigenschaften sind richtig definiert.

  • Das ist schön und gut, nur leider kann ich damit wenig anfangen, wenn ich nicht genügend Infos habe bzw. dies nicht mit eigenen Augen sehen kann.


    Was meinst du genau mit "ohne function und Eigenschaft weiterverarbeiten"?

    Wie interagierst du mit der Klasse?


    Ich habe dir mal ein paar Kommentare im Code hinterlassen...



    Hast du schon die unterschiedlichen Werte der verschiedenen Variablen mittels var_dump() überprüft?

  • Ja, das ist mir auch bewusst. Nur was bringt dir/euch der ganze Code wenn der Fehler in 2 Funktionen nur auftritt? Da habt ihr viel mehr Arbeit.


    $this->ankunftstag & $this->abfahrtstag bekommt die value aus einem Formular. Habe diese beiden Attribute schon per getter-Methode ausgegeben. Die sind vorhanden. Und nach dem erstellen der DateTime sind die auch vorhanden. Nur ab der Subtraktion ist der Wert weg. $days sowie $this->bookedDays gibt "" aus und das selbe ist auch bei $gesamtKosten.


    Die Konstante PRICE ist oben bei den attributen definiert.

  • Kann auch nix sehen. Sehe keine Tippfehler o.ä.


    Wenn Du keine Werte bei den get-Funktionen bekommst, dann wurden die set-Funktionen wohl nicht ausgerufen.

    Order Du benutzt eine andere Instanz (also zB nicht die var, mit der Du die setter aufgerufen hast).


    nur geraten, fehlt ja code :)


    Edit: Posts überschnitten.


    Poste doch mal den Code, mit dem Du die Klasse ansprichst.

    zB

    PHP
    $object = new MyClass();
    $object->setBookedDays();
    var_dump($object->getBookedDays());
  • Jep, habe ich ja auch schon drauf hingewiesen.


    Habe mich nur dummerweise von abbringen lassen, da Stef ja schrieb, dass die Werte bis zur Subtraktion vorhanden sind. Damit meinte er allerdings die Eigenschaften der Klasse und nicht die lokalen Variablen $ankunftstag bzw. $abfahrtstag. Mein Fehler, nicht gut genug aufgepasst.


    Wobei es mich wundert, dass PHP da kein Fehler schmeißt... Sollte doch eigentlich etwas in die Richtung Class not found produzieren.

  • Hey,


    an Datetime liegt es nicht. So funktioniert das auch, egal ob DateTime oder Datetime.

    Mein Problem war, dass ich die beiden funktionen nicht aufgerufen habe. ^^


    Habe dies ganz vergessen.


    Vielen Dank für die Hilfe :)

  • Mein Welt ist zusammengebrochen.

    Das gibt wirklich alles dasselbe aus:

    Code
    $a=new DateTime('2018-01-20');
    $b=new Datetime('2018-01-20');
    $c=new dAtEtImE('2018-01-20');
    echo $a->format('Y-m-d H:i:s') . '<br>';
    echo $b->format('Y-m-d H:i:s') . '<br>';
    echo $c->format('Y-m-d H:i:s') . '<br>';

    Wer dafür verantwortlich ist gehört auf den Scheiterhaufen.


    Oh, wieder was dazu gelernt. Klassennamen sind case insensitive...

    Hast Du da vielleicht irgendwas Offizielles? Die Suchmaschine meines Vertrauens gibt mir 0 brauchbare Ergebnisse, und in der Doku konnte ich auch noch nichts finden.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!