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

  • Gast-Avatar
    Ein Gast erstellte das Thema Funktion in anderer aufrufen.

    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.

  • Gast-Avatar
    Ein Gast antwortete
    Ich komm eher zu der Einsicht, dass ich mein Design nochmal überarbeiten muss.

    Einen Kommentar schreiben:


  • tkausl
    antwortet
    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 ';
        }


    ?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:


  • mermshaus
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    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(); 

    Einen Kommentar schreiben:

Lädt...
X