Ankündigung

Einklappen
Keine Ankündigung bisher.

Funktion in anderer aufrufen

Einklappen

Neue Werbung 2019

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

  • Funktion in anderer aufrufen

    An die php-artisten unter euch. Ich habe ein (wahrscheinlich nur für mich) kniffliges Vorhaben. Bissl Code zur Demonstrationszwecken:

    PHP-Code:
    class First{

        public function 
    firstFunction(){
        }

        public function 
    secondFunction(){
        }

    }

    class 
    Second extends First{

        public function 
    callThisInAllFuncsOfFirst(){
        }

    }

    $s = new Second();
    $s->firstFunction();
    $s->secondFunction(); 
    Mein Wunsch ist, dass ich es schaffen muss, dass die Methode callThisInFirstFunc innerhalb von allen Methoden aufgerufen wird, die von der Elternklasse kommen, ohne, dass ich eine Art Wrapper schreibe, oder die Funktionen nochmal aufrufe, wie:

    PHP-Code:
    <?
    public function wrap(){
    //und hier beide funktionen ausführen.
    }
    Zur Erklärung: Es ist wichtig, dass die Methode innerhalb der anderen Methoden aufgerufen wird (an welchem Punkt ist egal; am besten jedoch gleich zu Beginn), weil sich diese Methode Informationen von der Methode holt, die sie "umgibt", und ein Wrapper somit nutzlos wäre.

    Ich hoffe ich war verständlich.


  • #2
    Die benötigte Methode in die Basisklasse packen und dort abstrakt definieren.

    PHP-Code:
    abstract class First{

        public function 
    firstFunction(){
            
    $this->callThisInAllFuncsFirst();
            echo 
    'firstFunction ';
        }

        public function 
    secondFunction(){
            
    $this->callThisInAllFuncsFirst();
            echo 
    'secondFunction ';
        }

        abstract public function 
    callThisInAllFuncsOfFirst();
    }

    class 
    Second extends First{

        public function 
    callThisInAllFuncsOfFirst() {
            echo 
    'callThisInAllFuncsOfFirst ';
        }

    }

    $s = new Second();
    $s->firstFunction();
    $s->secondFunction(); 
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Clever. Auf das wär ich nicht gekommen.
      Kennst du auch eine Möglichkeit, ohne dass man die Elternklasse verändern muss?

      Kommentar


      • #4
        Na ja, wenn du die Methode callThisInAllFuncsOfFirst innerhalb der Methoden firstFunction und secondFunction aufrufen willst, wirst du das nur erreichen können, indem du sie innerhalb aufrufst.

        Du könntest ansonsten noch mal beschreiben, was du inhaltlich machst.

        Kommentar


        • #5
          Eigentlich will ich die Klassen somit nur inhaltlich trennen. Ich möchte pre und post Bedingungen definieren, von denen ich denke, dass sie in der eigentlichen Klasse nix verloren habe (oder ich habe einen Designfehler). Ich möchte in der Elternklasse nur Methoden haben, die gleichartige Operationen ausführen; wie beispielsweise plus, minus, mal, geteilt, ... von einem Taschenrechner. Danach möchte ich festlegen, welche Vor- und Nachbedingungen gelten, dies jedoch in einer eigenen Klasse.

          Kommentar


          • #6
            PHP-Code:
            abstract class First{

                public function 
            firstFunction(){
                    echo 
            'firstFunction ';
                }

                public function 
            secondFunction(){
                    echo 
            'secondFunction ';
                }
            }

            class 
            Second extends First{

                public function 
            firstFunction(){
                    
            $this->callThisInAllFuncsOfFirst();
                    
            parent::firstFunction();
                }

                public function 
            secondFunction(){
                    
            $this->callThisInAllFuncsOfFirst();
                    
            parent::secondFunction();
                }

                public function 
            callThisInAllFuncsOfFirst() {
                    echo 
            'callThisInAllFuncsOfFirst ';
                }


            ?
            Zitat von nikosch
            Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

            Kommentar


            • #7
              Ich komm eher zu der Einsicht, dass ich mein Design nochmal überarbeiten muss.

              Kommentar

              Lädt...
              X