Hi,
eine Funktionsbibliothek [..] das wäre auch der Vorteil die Funktionen in einer Klasse zu bündeln.
Nochmal die Aufgabe:
Führe einfach nur eine Funktion aus, so als wäre sie eine Built-in-Funktion.
Klar, ich könnte eine Lib zusammenbauen, wo die alle drin sind. Denke jedoch ans Kompilieren: Da werden stets ALLE Funktionen kompiliert, womöglich brauche ich aber nur eine von denen. Also keine Lib?
Lösung: Die Funktion wird aus dem FS oder aus einer DB oder von sonstwo nachgeladen. In Perl steht der Name der Funktion in $AUTOLOAD. Hier nun das Perl-Beispiel für die Klasse main, die main gibt es in Perl immer (Beispiel ohne Fehlerbehandlung):
use strict;
use warnings;
foo(1,2,3,4); # einfach mal ne Funktion aufrufen
sub AUTOLOAD{
# main::foo steht in $AUTOLOAD, wir brauchen nur foo
my $meth = [split "::", our $AUTOLOAD];
require $meth->[1].'.pm'; # eine foo.pm liegt im @INC Pfad
my $code = main->can($meth->[1]); # can() liefert die Code-Referenz
&$code(@_); # Code ausführen
}
Jetzt schauen wir mal in die Datei foo.pm da steht drin:
use strict;
use warnings;
sub foo{
print "@_";
}
1;
Und hier ist die Ausgabe: 1 2 3 4
Mit einer zweckmäßigen Fehlerbehandlung versehen, wird das zu einer feinen Sache. Geht auch mit PHP zu machen.
Horst