Thomas: Funktionen suchen und einbinden

Hi Forum,

ich bin auf der Suche nach einer Methode, mittels PHP alle Funktionen (jede einzelne eine Datei) in einem Ordner zu suchen und einzubinden bzw. anzusprechen.
Sprich, ich erstelle eine Funktion in einer einzelnen PHP-Datei und lege die einfach in den Funktionsordner ab.
PHP soll dann bei Aufruf der Funktion suchen und die Funktion ansprechen.

Gibt es da eine Möglichkeit?

Danke, Thomas

  1. Hi.
    Verstehe ich dich richtig? Du willst Funktionen in seperaten Datein unterbringen und dann immer alle Dateien includen, die im aktuellen Funktionsordner liegen?

    Na dann brauchs du Verzeichnis- und Dateibehandlung, z.B.
    < http://de.php.net/manual/de/function.readdir.php>

    mfg
    Knusperklumpen

    1. Hi Knusperklumpen,

      jein.
      Am liebsten wär es mit halt, den Dateien die Funktionsnamen zu geben und dynamisch zu includen. Dann brauchts nicht alle einzubinden.

      Thomas

      1. jein.
        Am liebsten wär es mit halt, den Dateien die Funktionsnamen zu geben und dynamisch zu includen. Dann brauchts nicht alle einzubinden.

        Ach so in der Art ... ?

        Es gibt eine Funktionsdatei "funktion1.inc.php"

        In einer anderen Datei wird
        bla = funktion1();
        aufgerufen.

        Und nun soll er automatisch wissen, dass funktion1.inc.php includet werden muss?

        1. Hi,

          ja genau, so dass ich nur noch die Funktion an sich schreiben muss und diese via PHP wenn benötigt eingebunden wird.

          Thomas

          1. Das Vorhaben scheint ja ganz nett zu sein, nur müsstest du ja dann deine PHP-Datei vor dem Ausführen parsen, weil du ja schon vorher die entsprechenden Funktionsdateien includen musst, bevor die Funktion aufgerufen wird.

            Alternativ könntest du eine Funktion schreiben, der du den Namen der eigentlichen Funktion und deren Parameter übergibst.

            function blablubb($funktionsname, $parameter)
            {
             include($funktionsname."inc.php");
             eval($funktionsname."($parameter);");
            }

            Ob das mit dem eval aktuell so funktioniert weiß ich nicht, ist ungetestet ... so in der Art müsste das aber laufen
            < http://de.php.net/manual/de/function.eval.php>

            Inwieweit die ganze Sache sinnig ist möchte ich derzeit nicht beurteilen.

            mfg
            Knusperklumpen

            1. Hi,

              dank dir, ich werd mal sehen, was ich daraus mache....

              Thomas

            2. Hallo,

              tatsächlich wäre das mal eine schöne Idee für ein Modul, da sich leider weder set_error_hanlder() noch ein try-catch-Konstrukt in PHP dafür verwenden lassen.

              Ob das mit dem eval aktuell so funktioniert weiß ich nicht, ist ungetestet ... so in der Art müsste das aber laufen
              http://de.php.net/manual/de/function.eval.php

              eval() bedarf es nichteinmal. Allerdings bedarf es eines wrappers, der dies übernimmt:

              [link:http://de3.php.net/manual/de/language.functions.php@title=function] ausfuehren($name,$arg){  
                 [link:http://de3.php.net/manual/de/function.include.php@title=include]($name.'.inc');  
                 [link:http://de3.php.net/manual/de/function.call-user-func.php@title=call_user_func]($name,$arg);  
              }
              

              Gruß aus Berlin!
              eddi

              1. echo $begrüßung;

                [link:http://de3.php.net/manual/de/language.functions.php@title=function] ausfuehren($name,$arg){

                link:http://de3.php.net/manual/de/function.include.php@title=include;
                   link:http://de3.php.net/manual/de/function.call-user-func.php@title=call_user_func;
                }

                  
                Hier ein Verbesserungsvorschlag, der mit einer variablen Anzahl von Parameter umgehen kann:  
                  
                function ausfuehren($name) {  
                  include\_once $name.'.inc';  
                  $args = func\_get\_args();  
                  call\_user\_func\_array($name, $args);  
                }  
                  
                Das Zwischenspeichern in der Variable $args ist nötig, da ein call\_user\_func\_array($name, func\_get\_args()) abgelehnt wird: "func\_get\_args(): Can't be used as a function parameter".  
                  
                Außerdem sollte include\_once statt include verwendet werden, dann kann ausführen() auch mehrfach für den selben $name aufgerufen werden.  
                  
                  
                echo "$verabschiedung $name";
                
          2. echo $begrüßung;

            so dass ich nur noch die Funktion an sich schreiben muss und diese via PHP wenn benötigt eingebunden wird.

            So etwas kennt PHP, allerdings nur für Klassen und ab PHP 5. Das Feature nennt sich Autoloading Objects.

            echo "$verabschiedung $name";

            1. Hi,

              Mist, bin auf PHP4.

              Dank dir
              Thomas