tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
253
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    time-master time-master ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    121
    Hallo..
    Ich habe ein Problem und finde einfach keine Lösung.. Ich möchte eine Funktion, die in einer Klasse ist, vor jedem anderen Funktionsaufruf der Klasse ausführen..
    Ein Beispiel..


    PHP-Code:

    class Klasse 

      private 
    $counter

      public function 
    __construct () 
      { 
        
    $this->counter 0
      } 

      private function 
    IchWillImmerAufgerufenWerden () 
      { 
        print ++
    $this->counter
      } 

      public function 
    Test1 () 
      { 
        print 
    " x aufgerufen!<BR>"
      } 

      public function 
    Test2 () 
      { 
        print 
    " x aufgerufen!<BR>"
      } 


    $cls = new Klasse () 
    $cls->Test1 (); 
    $cls->Test2 (); 
    /* 

    Ausgabe soll sein: 
    1 x aufgerufen! 
    2 x aufgerufen! 

    */ 



    Das ich die Funktion "IchWillImmerAufgerufenWerden" in den Funktionen "Test1" und "Test2" einfach nur aufrufen könnte weiss ich.. nur das möchte ich nicht, weil meine Klasse vererbt werden soll und ich daher nicht weiss wie die Funktionen heißen werden!
     

  2. #2
    Registriert seit
    Sep 2003
    Ort
    Fürth(Franken)
    Beiträge
    1.060
    Blog-Einträge
    3
    PHP-Code:
    public function Test1 ()
      {
        
    $this->IchWillImmerAufgerufenWerden(); 
        print 
    " x aufgerufen!<BR>";
      }

      public function 
    Test2 ()
      {
        
    $this->IchWillImmerAufgerufenWerden(); 
        print 
    " x aufgerufen!<BR>";
      } 
    So vielleicht? Denn eine andere Möglichkeit wäre mir auch neu. ( oder sie fällt mir gerade nicht ein )

    greetz
    daddz
     
    be inspired...simplify...

  3. #3
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Du könntest deine Methodennamen intern mit einem Präfix (z.B. einem Unterstrich) versehen und sie auf private setzen. Methodenaufrufe von außerhalb werden dann über die „magische Methode“[1] __call abgehandelt, die immer dann in Aktion tritt, wenn eine Methode aufgerufen wird, die nicht existiert. Darin führen wir zuerst IchWillImmerAufgerufenWerden und anschließend die tatsächliche Methode (durch voranstellen des Präfixes) aus.

    [1] „magische Methode“ deshalb, weil sie selbstständig von PHP zum geeigenten Zeitpunkt aufgerufen wird


    Verwirrt? Gut, dann gibt's gleich noch etwas Quelltext:
    PHP-Code:
    <?php

    class Klasse
    {
        private 
    $counter;
        
        public function 
    __construct()
        {
            
    $this->counter 0;
        }
        
        private function 
    IchWillImmerAufgerufenWerden()
        {
            print ++
    $this->counter;
        }
        
        public function 
    __call($method$args)
        {
            if (!
    method_exists($this'_'.$method)) {
                
    // Die angeforderte Methode ist nicht implementiet
                // => Fehler!
                
    trigger_error('Call to undefined method '.$method,
                    
    E_USER_ERROR);
            }

            
    $this->IchWillImmerAufgerufenWerden();

            return 
    call_user_func_array(array($this'_'.$method),
                
    $args);
        }

        private function 
    _Test1()
        {
            print 
    '× aufgerufen!'."\n";
        }

        private function 
    _Test2()
        {
            print 
    '× aufgerufen!'."\n";
        }
    }

    $cls = new Klasse();
    $cls->Test1();
    $cls->Test2();

    /*
    Ausgabe:
    1× aufgerufen!
    2× aufgerufen!
    */

    ?>
    Ist zwar keine recht schöne Lösung, aber sie funktioniert zumindest
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

Ähnliche Themen

  1. Methodenaufruf
    Von dern3ro im Forum Java Grundlagen
    Antworten: 1
    Letzter Beitrag: 17.06.10, 19:57
  2. Antworten: 7
    Letzter Beitrag: 19.09.07, 15:27
  3. Methodenaufruf bei Programmende
    Von The_Answer1985 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 30.08.07, 13:48
  4. Methodenaufruf
    Von The_Answer1985 im Forum Java
    Antworten: 4
    Letzter Beitrag: 26.08.07, 09:05