Hilfsfunktionen in Funktionen

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

  • Hilfsfunktionen in Funktionen

    Hi, ich habe eine Klasse, darin befinden sich meine Funktionen, und für einer meiner Funktionen möchte ich die Komplexität des Problems aufteilen, in dem ich in der Funktion eine Hilfsfunktion kreiere.

    Geht das allgemein nicht in PHP oder wie müsste die Syntax lauten? In Pascal konnte man das so machen um eine Funktion übersichtlicher zu gestalten.

    Danke für eure Antworten !!

    PHP-Code:
    Fehlermeldung:

    Fatal errorCall to undefined method meineKlasse::hilfsfunktion() in .../classes.php on line 2113

    class meineKlasse{
        public function 
    Oberfunktion(){
             function 
    hilfsfunktion (){
             
             }

             
    // ... Anweisungen
             
    hilfsfunktion ();
        }



  • #2
    Innerhalb der oberfunktion sollte die hilfsfunktion eigentlich verfügbar sein - aber auch nur da.

    Im großen und ganzen macht das aber keinen sinn. Du müsstest beim nächsten aufruf der oberfunktion verhindern, dass die funktion erneut deklariert wird, was zu einem fehler fuhren würde. Mehr sinn macht es, einfach eine weitere methode zu erstellen.

    Außerdem rate ich dir, nicht alle klassen in eine datei zu werfen. Mach dich stattdessen über autoloading schlau.
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      In Pascal konnte man das so machen .....
      In Pascal "lebt" die innere Funktion im Namensraum der definierenden Funktion.
      Das ist in PHP anders!
      Es gibt keine lokalen Funktionen. Sie werdem immer im globalen Namensraum erzeugt. Die Verwendung solcher Funktionen macht also in PHP deutlich weniger Sinn.

      Beispiel:
      PHP-Code:
      function t1()
      {
        function 
      t2()
        {
          echo 
      'hallo';
        }

      Wird t2() VOR t1() aufgerufen, hagelt es Fehler.
      Wird t1() VOR t2() aufgerufen, ist alles OK.

      Die Funktion t2() wird also erst beim ersten Aufruf von t1() im globalen Namensraum angelegt.
      Zuletzt geändert von combie; 22.09.2008, 10:54.
      Wir werden alle sterben

      Kommentar


      • #4
        Scheint bei OOP in der tat nicht (mehr) zu funktionieren. Naja, ist ja auch gut so.

        EDIT:
        @combie: Pack deine Funktionen mal als Methoden in eine Klasse, wie der Threadstarter auch sein Problem beschreibt.


        Je nach dem, was du machst, könnte das Template-Pattern was für dich sein. Vielleicht ist das aber auch schon to much.
        Zuletzt geändert von TobiaZ; 22.09.2008, 11:46.

        Kommentar


        • #5
          Quark!
          Getestet mit PHP5.2.6

          PHP-Code:
          class test
          {
            function 
          t1()
            {
              function 
          t2()
              {
                echo 
          'Hallo Welt!';
              }
            }
          }


          //testcode
          $t= new test// objekt generieren
          $t->t1(); // t2() generieren
          t2(); // steht global zur verfühgung 
          Zugegeben primitiv, läuft aber ohne Meldung durch und schreibt: 'Hallo Welt!'
          Wir werden alle sterben

          Kommentar


          • #6
            stümmt!

            Kommentar


            • #7
              Dann dank ich euch für die Antworten und werde wie unset gesagt hat mehrere private Methoden erstellen, die meine große komplizierte Funktion nutzen kann, damit der Code schön verständlich und übersichtlich bleibt :-)

              Thx

              Kommentar

              Lädt...
              X