Prüfen ob Methode statisch ist

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

  • Prüfen ob Methode statisch ist

    Hallo,

    gibt es eine Möglichkeit zu überprüfen ob eine Methode statisch ist oder nicht (PHP5)?

    Beispiel:
    PHP-Code:
    class bar {
        private 
    $var1        'test1';
        static private 
    $var2 'test2';

        public function 
    foo1() {
            return 
    $this->var1;
        }

        public static function 
    foo2() {
            return 
    self::$var2;
        }

    die gesuchte Funktion sollte für foo1 false zurückgeben, und für foo2 true.

    Ich habe bisher leider nur die Möglichkeit über die Reflection API gefunden, aber dazu brauche ich eine Instanz der Klasse, und das ist genau das Problem das ich umgehen möchte.

    Folgende Ansätze Funktionieren leider nicht:
    PHP-Code:
    echo '<b>function_exists</b><br />';
    echo 
    function_exists(array('bar','foo1')) ? 'true' 'false'// false
    echo '<br />';
    echo 
    function_exists(array('bar','foo2')) ? 'true' 'false'// false
    echo '<br />';

    echo 
    '<b>is_callable</b><br />';
    echo 
    is_callable(array('bar','foo1')) ? 'true' 'false'// true
    echo '<br />';
    echo 
    is_callable(array('bar','foo2')) ? 'true' 'false'// true
    echo '<br />';

    echo 
    '<b>method_exists</b><br />';
    echo 
    method_exists('bar','foo1') ? 'true' 'false';  // true
    echo '<br />';
    echo 
    method_exists('bar','foo2') ? 'true' 'false';  // true
    echo '<br />'
    Danke schon mal für eure Hilfe!

  • #2
    Umgehe doch einfach nicht das Problem und rufe die Instanz auf. Hier steht, wie du das am besten machst http://www.phpbar.de/w/Singleton
    Sunshine CMS
    BannerAdManagement
    Borlabs - because we make IT easier
    Formulargenerator [color=red]Neu![/color]
    Herkunftsstatistik [color=red]Neu![/color]

    Kommentar


    • #3
      Dann bekomme ich aber auch wieder eine Instanz (wenn auch nur eine einzige).
      Ich suche eine Variante, die mir besagt ob
      ich
      bar::foo1 bzw. bar::foo2 ausführen kann oder nicht...

      Kommentar


      • #4
        in welchem kontext braucht man denn sowas?

        evtl. mittels assert()?

        Kommentar


        • #5
          Re: Prüfen ob Methode statisch ist

          Original geschrieben von tracer23
          Ich habe bisher leider nur die Möglichkeit über die Reflection API gefunden, aber dazu brauche ich eine Instanz der Klasse, und das ist genau das Problem das ich umgehen möchte.
          und warum willst du das umgehen, das löst doch genau dein problem. die instanz ($this) hast du doch innerhalb der klasse.
          PHP-Code:
          $method=new ReflectionMethod($this$method_name);
          return 
          $method->isStatic(); 

          Kommentar


          • #6
            Kontext der Verwendung: Serverseitiger Teil einer AJAX-Abfrage: Aufgerufen werden dürfen Funktionen (kein problem mit is_callable und function_exists) sowie statische Methoden, nur sollte ich eben vor dem Aufruf prüfen ob ich das auch darf...
            Ob sie existieren finde ich ja mit is_callable raus, aber eben nicht ob sie auch statisch sind.
            Instanzen will ich vermeiden, da diese teilweise im constructor Laufzeitvariablen vorraussetzen die bei der AJAX-Abfrage nicht zur Verfügung stehen und auch nicht benötigt werden.
            Zuletzt geändert von tracer23; 05.02.2007, 09:49.

            Kommentar


            • #7
              Original geschrieben von tracer23
              Ich suche eine Variante, die mir besagt ob
              ich
              bar::foo1 bzw. bar::foo2 ausführen kann oder nicht...
              achso, hier noch eine variante mit einer separaten funktion:
              PHP-Code:
              function checkMethod($class$method)
              {
               try
                {
                 
              $method=new ReflectionMethod($class$method);
                 return 
              $method->isPublic()&&$method->isStatic();
                }
               catch(
              Exception $e)
                {
                 return 
              false;
                }
               }

              var_dump(checkMethod('bar''foo1'));
              var_dump(checkMethod('bar''foo2'));
              var_dump(checkMethod('bar''foo3'));
              var_dump(checkMethod('foo''bar')); 
              ausgabe: bool(false) bool(true) bool(false) bool(false)

              edit: $method->isPublic() hinzugefügt, könnte ja auch eine private static methode sein.
              Zuletzt geändert von 3DMax; 05.02.2007, 10:32.

              Kommentar

              Lädt...
              X