[OOP] Alias für eine Methode erstellen

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

  • [OOP] Alias für eine Methode erstellen

    Hallo!

    Ich habe eine Klasse mit u.a. folgenden Methoden:
    check_table()
    check_table_cond()
    check_query()
    check_query_cond()

    An check_table() wird eine variable Anzahl von Argumenten übergeben, die mit func_get_args() ausgelesen werden; danach folgt deren Bearbeitung.
    Die Methode check_query() ist in der Bearbeitungsroutine identisch, muss aber vorab noch eine Datenbankabfrage bzw. die darin enthaltenen Tabellen und Felder parsen. Das Resultat sind genau die Argumente, die man auch an check_table() übergeben kann.
    Daher hatte ich auch vor, mit call_user_method_array() zu arbeiten und die Werte von check_query() direkt an check_table() weiterzugeben. Doch scheint dies nicht recht zu klappen, da ich &$this nicht als Objektreferenz angeben kann.

    Bei check_table_cond() und check_query_cond() verhält es sich ganz ähnlich, außer, dass zweitere Methode ein identisches Alias von ersterer sein soll, die auch eine variable Anzahl von Argumenten verarbeitet.

    PS: ich hab kein PHP5, was auch das Arbeiten mit call_user_func_array(array(&$obj, 'methodenname'), $array) kaum möglich macht.

    Ich hoffe, dass es da eine Lösung gibt, auf die ich noch nicht gekommen bin
    Zuletzt geändert von Maranello-550; 31.07.2005, 18:20.
    arrays sind klasse

  • #2
    Re: [OOP] Alias für eine Methode erstellen

    probierst mal damit:
    http://de.php.net/manual/de/function...func-array.php
    da steht, dass es auch auf Version4 läuft...btw was soll denn daran nicht funktionieren ?_?,

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Das Problem ist, dass ich innerhalb einer Methode auf eine andere Methode zugreifen will, und nicht von außerhalb. Genauer:
      PHP-Code:
      // Das geht ...
      class test
      {
          function 
      xy1($x FALSE$y FALSE)
          {
              if (
      $x && $y)
              return 
      'ok';
          }
      }

      $test = new test;
      echo 
      call_user_method_array('xy1', &$test, array(TRUETRUE));

      // das geht nicht ...
      class test
      {
          function 
      xy1($x FALSE$y FALSE)
          {
              if (
      $x && $y)
              return 
      'ok';
          }

          function 
      xy2($x FALSE$y FALSE)
          {
              
      call_user_method_array('xy1', &$this, array($x$y));
          }
      }

      $test = new test;
      echo 
      $test->xy2(TRUETRUE); 
      Wie kann ich also ein Alias für eine Methode in derselben Klasse erstellen?
      Zuletzt geändert von Maranello-550; 31.07.2005, 21:37.
      arrays sind klasse

      Kommentar


      • #4
        PHP-Code:
        <?php 
        class test
        {
            var 
        $test 'nicht ok'//debugging
            
            
        function xy1($x FALSE$y FALSE)
            {
                if (
        $x && $y)
                return 
        $this->test;
            }

            function 
        xy2($x FALSE$y FALSE)
            {
                return 
        call_user_func_array(array(&$this'xy1'), array($x$y));
            }
        }

        $test = new test;

        // eigenschaft ändern zum debugging
        $test->test 'ok';
        echo 
        $test->xy2(TRUETRUE);

        ?>
        vielleicht sowas?
        oder habe ich dich mißverstanden?

        Kommentar


        • #5
          Wunderbar, es klappt ja doch! Ich habe dabei nur die ganze Zeit einen entscheidenden Fehler gemacht (den ich gerade eben beim testen deines Beispiels festgestellt habe):
          Ich habe vor der call-Funktion keine return-Anweisung gesetzt! Jetzt geht es sogar mit call_user_method_array().

          arrays sind klasse

          Kommentar


          • #6
            beachte, call_user_method_array() ist deprecated.
            vielleicht doch call_user_func_array()?

            Kommentar


            • #7
              guter hinweis; ich werde mich dran halten :-)
              arrays sind klasse

              Kommentar

              Lädt...
              X