Ankündigung

Einklappen
Keine Ankündigung bisher.

Clone-Methode als Alternative zu DateTimeImmutable

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Clone-Methode als Alternative zu DateTimeImmutable

    Hi,
    auch schonmal darüber geärgert, für solche
    PHP-Code:
    $endDate = clone $startDate;
    $endDate->modify("+ 1week"); 
    oder ähnliche Anweisungen immer 2 Zeilen schreiben zu müssen?
    Nun, man kann die Klasse DateTimeImmutable nehmen, die gibt immer eine neues Objekt(Kopie) zurück.
    Aber ist immer ein neues Objekt gewünscht?

    Möchte mal eine Alternative zu Diskussion stellen, mir der ich das selbst in der Hand habe:
    PHP-Code:
    class DateTimeExt extends DateTime{

      
    // clone self
      
    public function cloneSelf(){
        
    $clone = clone $this;
        return 
    $clone;
      }
    }
    $StartDate = new DateTimeExt("2017/1/16");
    echo 
    "Ende: ".$StartDate->cloneSelf()->modify("+1 week")->format("d.m.Y")."<br>\n";
    echo 
    "Start: ".$StartDate->format("d.m.Y")."<br>\n"
    Ausgabe:
    Ende: 23.01.2017
    Start: 16.01.2017

    LG jspit

  • #2
    Zitat von jspit
    Nun, man kann die Klasse DateTimeImmutable nehmen, die gibt immer eine neues Objekt(Kopie) zurück.
    Aber ist immer ein neues Objekt gewünscht?
    Aber clone mach doch nichts anderes?! Ein neues Objekt via Kopie.

    Zitat von Doku zu clone
    Eine Objektkopie wird durch die Nutzung des clone Schlüsselwortes ... erzeugt

    Somit habe ich hier identes verhalten, aber ohne die Extra-Klasse.
    PHP-Code:
    $StartDate = new DateTimeImmutable("2017/1/16");
    echo 
    "Ende: ".$StartDate->modify("+1 week")->format("d.m.Y")."<br>\n";
    echo 
    "Start: ".$StartDate->format("d.m.Y")."<br>\n";

    /*
    Ende: 23.01.2017
    Start: 16.01.2017
    */ 
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Und was ist daran so Schlimm
      PHP-Code:
      $StartDate = clone $EndDate = new DateTime("2017/1/16");
      echo 
      "Ende: ".$EndDate->modify("+1 week")->format("d.m.Y")."<br>\n";
      echo 
      "Start: ".$StartDate->format("d.m.Y")."<br>\n"
      Sehe jetzt den Vorteil von deiner Methode nicht.

      Kommentar


      • #4
        Sogar "sowas" würde funktionieren:

        PHP-Code:
        $StartDate = new DateTime("2017/1/16");
        echo 
        "Ende: ".(clone $StartDate)->modify("+1 week")->format("d.m.Y")."<br>\n";
        echo 
        "Start: ".$StartDate->format("d.m.Y")."<br>\n";

        /*
        Ende: 23.01.2017
        Start: 16.01.2017
        */ 
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Ok, #3 und #4 sind sinnvolle Alternativen ohne extra Klasse. So ähnlich wie #4 hatte ich probiert und bekam ein
          Code:
          Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR) ..
          Hab es jetzt nochmal probiert, das Beispiel #4 läuft ab PHP 7.0.

          Kommentar

          Lädt...
          X