Destruktor bei Skriptabbruch

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

  • Destruktor bei Skriptabbruch

    Hallo,

    ich hätte eine kurze Frage zum Destruktor einer Klasse: Ich verschiebe einige Datenbankeinträge ans Ende des Skriptes, indem ich einige Datenbankeinträge nicht in die normalen Methoden, sondern in den Destruktor der jeweiligen Klasse setze.

    Doch was passiert nun, wenn ein User das Skript während der Berechnung abbricht? Stoppt dann das Skript genau an der Stelle mit der Berechnung? Oder wird nur die Ausgabe beim Client gestoppt und des Skript wird auf dem Server normal weiterbearbeitet?

    Gruß Tarlar

  • #2
    Hallo,

    das hängt von der Einstellung ignore_user_abort in der php.ini ab.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Soll heißen, dass bei TRUE das Skript weiter ausgeführt wird und gewährleistet ist, dass der Destruktor auch tatsächlich zum Einsatz kommt?

      Kommentar


      • #4
        Zitat von Tarlar Beitrag anzeigen
        ich hätte eine kurze Frage zum Destruktor einer Klasse: Ich verschiebe einige Datenbankeinträge ans Ende des Skriptes, indem ich einige Datenbankeinträge nicht in die normalen Methoden, sondern in den Destruktor der jeweiligen Klasse setze.
        Davon würde ich dringend abraten. Du hast keine Garantie dafür wann und ob der Destruktor ausgeführt wird. Außerdem weißt du gar nicht, ob zu dem Zeitpunkt die Datenbankverbindung noch besteht.

        Kommentar


        • #5
          Es handelt sich nur um einen Log. Wichtige unabdingbare Einträge führe ich schon im Skript und nicht im Destruktor aus.

          Ich wollte einfach nur wissen, wie der Hase läuft

          Kommentar


          • #6
            In dem Fall läuft der Hase zig zag und nicht vorhersehbar.

            Kommentar


            • #7
              Alles Klar. Dann noch eine Frage. Kann ich aus dem Destruktor noch eine Methode aufrufen oder ist das nicht möglich?

              Dann könnte ich die Datenbankeinträge in eine eigene Methode packen und das während der Laufzeit aufrufen und als Absicherung im Destruktor nochmals.

              Kommentar


              • #8
                Kann ich aus dem Destruktor noch eine Methode aufrufen oder ist das nicht möglich?
                Ja, das ist möglich, wenn das ZielObjekt noch besteht.
                Aber auf das Bestehen gibts keine Garantie. Das kann bei jedem Durchlauf anderes sein!
                PHP 5 führt ein Destruktorkonzept ähnlich dem anderer objektorientierter Programmiersprachen wie C++ ein. Die Destruktormethode wird aufgerufen, sobald alle Referenzen auf ein bestimmtes Objekt entfernt werden oder wenn das Objekt explizit zerstört wird, [COLOR="#ff0000"]oder in beliebiger Reihenfolge am Ende des Skripts.[/COLOR]
                Aus dem Handbuch.
                Wir werden alle sterben

                Kommentar


                • #9
                  Ich würde dringendst darauf verzichten, den Destruktor für deine Zwecke zu missbrauchen. Du solltest besser die entsprechenden Aktionen durch einen expliziten Methodenaufruf anstoßen, nachdem alles andere erledigt ist.

                  Eventuell ist auch register_shutdown_function für dich interessant, aber auch das wäre vermutlich nicht sauber umsetzbar für dein Vorhaben.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar

                  Lädt...
                  X