Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PHP Destruct ...

Einklappen

Neue Werbung 2019

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

  • [Erledigt] PHP Destruct ...

    Servus,

    ich frage mich gerade welchen Sinn Destruktoren in PHP machen.
    Destruktoren werden erst aufgerufen nachdem Resourcen bereits geschlossen sind was in meinen Augen aber wenig Sinn macht.
    Es wäre praktisch wenn diese vorher aufgerufen werden, ich wollt dies verwenden um per Socket einen Quit Befehl an einen Server zu schicken damit der Server die Connection sauber beendet aber da Socket bei desctruct Aufruf bereits geschlossen ist muss ich dies jedes mal händisch an Ende einer jeden Datei machen.

    Von daher ergibt sich für mich leider kein praktisch Beispiel für Destruktoren in PHP welche ich aus diesen Grund auch noch nie genutzt habe.

    Hier mal ein einfaches Beispiel mit einen FileHandle:

    PHP-Code:
    <?php
    class TestFile
    {
        protected 
    $_fhandle null;

        public function 
    __construct()
        {
            
    $this->_fhandle fopen("test.txt""w");
            
    fwrite($this->_fhandle"...constructor call...\n");
        }

        public function 
    __destruct()
        {
            
    fwrite($this->_fhandle"...destructor call...\n");
            
    fclose($this->_fhandle);
        }
    }

    error_reporting(E_ALL);

    $tf = new TestFile;
    ?>
    Inhalt von text.txt
    Code:
    ...constructor call...

  • #2
    Müsste man den Destruktor nicht mittels unset($tf) ebenfalls auslösen können? Unset müsste natürlich auch explizit Aufgerufen werden, ist aber weniger Schreibarbeit als jedesmal fwrite und fclose zu nutzen.

    Kommentar


    • #3
      Ja das schon aber arbeitet hier der Garbage Kollektor nicht falsch das erst Resourcen geschlossen werden?

      [edit] Grad getestet selbst bei n unset wird der Destructor nicht aufgerufen.
      ups da hatte sich der Fehlerteufel eingeschlichen

      Kommentar


      • #4
        Das hat jetzt aber nichts mit...

        der falschen Schreibweise von __destruct zu tun, oder?!

        Kommentar


        • #5
          Zitat von drsoong Beitrag anzeigen
          der falschen Schreibweise von __destruct zu tun, oder?!
          Jap, grad noch mal getestet... um sicher zu gehen. Ich kann mich daran erinnern das es mal anders war aber ich glaub das war ne frühe 5er Version wo ich das probiert hatte.

          peinlich, aber Schreibfehler sind die Fehler die am meisten aufhalten, ist zumindest bei mir so

          Kommentar


          • #6
            Könntest du dann bitte noch die richtige Schreibweise verbessern und den Post als gelesen markieren?

            Kommentar


            • #7
              Jap, grad noch mal getestet... um sicher zu gehen. Ich kann mich daran erinnern das es mal anders war aber ich glaub das war ne frühe 5er Version wo ich das probiert hatte.

              peinlich, aber Schreibfehler sind die Fehler die am meisten aufhalten, ist zumindest bei mir so
              Heißt das jetzt, das Problem ist gelöst und Du hast nur den Funkltionsnamen falsch geschrieben? Verstehe den Thread gerade nicht.

              Kommentar


              • #8
                Genau das. Ruft man seinen Code mit __destruct() auf funktioniert es wie erwartet.

                Kommentar


                • #9
                  Zitat von phpdummi Beitrag anzeigen
                  Könntest du dann bitte noch die richtige Schreibweise verbessern und den Post als gelesen markieren?
                  passiert ... wie bereits gesagt ich kann mich noch daran erinnern das es mal anders war deshalb bin ich nicht direkt von einen Fehler meinerseits ausgegangen... erst als ich unset probiert hatte kam mir das ganze etwas spanisch vor.

                  Kommentar


                  • #10
                    Hmm, die Anpassung des Codes finde ich bezüglich der Threaddiskussion eigentlich unclever.

                    Kommentar


                    • #11
                      Ich dachte auch eher an "neuen Post mit verbesserter Syntax" habe mich aber mit
                      "bitte noch die richtige Schreibweise verbessern" sehr schlecht ausgedrückt. =(

                      Richtig:
                      PHP-Code:
                      <?php
                      error_reporting
                      (E_ALL E_STRICT); 

                      class 
                      TestFile 

                          protected 
                      $_fhandle null

                          public function 
                      __construct() 
                          { 
                              
                      $this->_fhandle fopen("test.txt""w"); 
                              
                      fwrite($this->_fhandle"...constructor call...\n"); 
                          } 

                          public function 
                      __destruct() 
                          { 
                              
                      fwrite($this->_fhandle"...destructor call...\n"); 
                              
                      fclose($this->_fhandle); 
                          } 


                      $tf = new TestFile;
                      Ausgabe:
                      Code:
                      ...constructor call...
                      ...destructor call...

                      Kommentar

                      Lädt...
                      X