Funktionen suchen und einbinden
Thomas
- php
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
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
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
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?
Hi,
ja genau, so dass ich nur noch die Funktion an sich schreiben muss und diese via PHP wenn benötigt eingebunden wird.
Thomas
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
Hi,
dank dir, ich werd mal sehen, was ich daraus mache....
Thomas
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
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";
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";
Hi,
Mist, bin auf PHP4.
Dank dir
Thomas