Tom: Definierte Funktionen ermitteln

Hello,

ich suche nach der elegantesten Möglichkeit, definierte Funktionen zu ermitteln.

<?php   ### __fuction__.php ###
header('Content-Type: text/plain');

function Eins()
{
    return "eins: " . __FUNCTION__ . "\r\n";
}

function Zwei()
{
    return "zwei: " . __FUNCTION__  .  "\r\nzwei ruft eins: ". eins() ."\r\n";
}

echo eins();
echo zwei();

include ('functions.inc.php');  ## deklariert Funktion Drei()

function Vier()
{
    return "vier: " . __FUNCTION__ . "\r\n";
}

$_functions = get_defined_functions();
print_r($_functions['user']);

?>

ergibt die Ausgabe:

eins: Eins
zwei: Zwei
zwei ruft eins: eins: Eins

Array
(
    [0] => eins
    [1] => zwei
    [2] => vier
    [3] => drei
)

Es können verständlicherweise nur die Funktionen gefunden werden, die im Script bereits zusammengeführt wurden, also entweder direkt im Script deklariert wurden oder eben included oder required wurden.

Wie könnte ich nun in einer größeren Applikation alle Funktionen ermitteln, ohne sie einzubinden, was bei einem include geschehen würde?

Es gibt ja leider kein undeclare() für Funktionen. Geladen ist geladen. Und bei einer größeren Applikation würde der Speicher für alle nicht ausreichen.

Die Output-Buffer-Funktionen helfen mir auch nicht weiter.

Bleiben mir da nur noch reguläre Ausdrücke und ein Parsen der ganzen Sammlung, oder hat jemand eine bessere Idee?

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de
  1. Hallo Tom,

    oder hat jemand eine bessere Idee?

    na klar. ;)
    Sieh Dir Tokenizer an. Im Gegensatz zu einem gebastelten, lexikalischen Parser, nutzt Du dabei den Interpreter selbst.

    Gruß aus Berlin!
    eddi

    1. Hello Eddi,

      oder hat jemand eine bessere Idee?

      na klar. ;)
      Sieh Dir Tokenizer an. Im Gegensatz zu einem gebastelten, lexikalischen Parser, nutzt Du dabei den Interpreter selbst.

      hab ich gar nicht dran gedacht. Probier ich gleich mal aus.

      Vielleicht löst der auch das nächste Problem, nämlich, welche Funktion in welcher benutzt wird.
      Eigentlich ist das Ziel, festzustellen, ob eine bestimmte Funktion P innerhalb einer anderen X benutzt wird. Dann muss X auf die Liste :-)

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Guten Tag,

        Tokenizer, mein Stichwort!

        hab ich gar nicht dran gedacht. Probier ich gleich mal aus.
        Vielleicht löst der auch das nächste Problem, nämlich, welche Funktion in welcher benutzt wird.
        Eigentlich ist das Ziel, festzustellen, ob eine bestimmte Funktion P innerhalb einer anderen X benutzt wird. Dann muss X auf die Liste :-)

        Schau dir mal meinen GozintograPHP an. Es sollte nur kleiner Modifikationen bedürfen, um statt includes und requires Funktionen verfolgen zu können.

        Gruß
        Christoph Jeschke

        --
        Zend Certified Engineer
        Certified Urchin Admin
        1. Hello,

          Schau dir mal meinen GozintograPHP an. Es sollte nur kleiner Modifikationen bedürfen, um statt includes und requires Funktionen verfolgen zu können.

          includes und requires werde ich bestimmt auch noch behandeln müssen. Soweit bin ich aber noch nicht.

          Wenn man bedenkt, wieviel Aufwand man treiben muss, um es für den User/Administrator eines Systems später bequem zu machen...

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
  2. Hi,

    Bleiben mir da nur noch reguläre Ausdrücke und ein Parsen der ganzen Sammlung, oder hat jemand eine bessere Idee?

    Ich habe es für mich mit konsequenter Nutzung von phpDocumentor-Kommentaren gelöst (@uses). Muß natürlich trotzdem dann alle Libs durchgehen ...

    Gruß, Cybaer

    --
    Zweck des Disputs oder der Diskussion soll nicht der Sieg, sondern der Gewinn sein.
    (Joseph Joubert, Schriftsteller)
    1. Hello,

      Bleiben mir da nur noch reguläre Ausdrücke und ein Parsen der ganzen Sammlung, oder hat jemand eine bessere Idee?

      Ich habe es für mich mit konsequenter Nutzung von phpDocumentor-Kommentaren gelöst (@uses). Muß natürlich trotzdem dann alle Libs durchgehen ...

      Wo gibt's dazu was zu lesen?

      Das soll allerdings später zur Laufzeit geschehen. Nicht unbedingt bei jedem Request, aber immer bevor ein berechtigter Administrator an den Zugriffsrechten auf Programmteile etwas ändert.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hi,

        Ich habe es für mich mit konsequenter Nutzung von phpDocumentor-Kommentaren gelöst (@uses). Muß natürlich trotzdem dann alle Libs durchgehen ...

        Wo gibt's dazu was zu lesen?

        Zu phpDocumentor? Im Netz. ;-)

        Zu meinem Tool? Ist nur für den internen Gebrauch, um bei Scripts genau die Funktionen einzzubinden, die wirklich gebraucht werden - und nicht die kompletten Libs ...

        Das soll allerdings später zur Laufzeit geschehen. Nicht unbedingt bei jedem Request, aber immer bevor ein berechtigter Administrator an den Zugriffsrechten auf Programmteile etwas ändert.

        OK, meine Zielvorgabe war eine andere und ist dazu wohl nicht so gut zu verwenden ...

        Gruß, Cybaer

        --
        Zweck des Disputs oder der Diskussion soll nicht der Sieg, sondern der Gewinn sein.
        (Joseph Joubert, Schriftsteller)