|
|
 |
|
|
 |
 |
 |
 |
 |
Hits gesamt: 5203005 Hits Heute: 1108 max. Hits (10.07.07): 6964 User Online: 27 Scripts: 2828 |
|
|
 |
 |
 |
 |
 |
 |
|
 |
|
|
 |
|
|
 |
|
|
 |
 |
 |
 |
 |
 php 4 Developer's Guide . Anleitungen und Lösungen für den professionellen Einsatz |
|
|
 |
 |
 |
 |
 |
 |
|
 |
|
 |
 |
 |
 |
 |
Manuals > PHP >
create_function |
create_function (PHP 4 >= 4.0.1) create_function --
Erzeugen einer anonymen / temporären (Lambda-Stil) Funktion
Beschreibung:string create_function ( string args, string code)
Erzeugt eine anonyme Funktion an Hand der übergebenen Parameter und
gibt einen eindeutigen Namen für diese zurück. Normalerweise sind
die args als mit "'" begrenzte Strings zu
übergeben. Dies gilt auch für code. Dadurch
werden die Variablen vor dem Parsen geschützt. Falls sie """
verwenden, müssen sie die Variablen-Namen "escapen", wie z.B.
$avar.
Dieser Befehl kann z.B. verwendet werden, um eine Funktion an Hand
von Informationen zu erzeugen, die erst zur Laufzeit vorliegen.
Beispiel 1.
Erzeugen einer anonymen / temporären Funktion per
create_function():
$newfunc = create_function('$a,$b','return "ln($a) + ln($b) = ".log($a * $b);'); echo "Neue Temp-Funktion: $newfunc\n"; echo $newfunc(2,M_E)."\n"; // Ausgabe: // Neue Temp-Funktion: lambda_1 // ln(2) + ln(2.718281828459) = 1.6931471805599
|
|
Sie können auch eine allgemeine Handhabungs-Funktion erstellen, die
einen mehr oder weniger große Anzahl an Operationen mit einer Liste
von Parametern durchführt.
Beispiel 2.
Beispiel zum o.a. Verwendungszweck:
function process($var1, $var2, $farr) { for ($f=0; $f < count($farr); $f++) echo $farr[$f]($var1,$var2)."\n"; }
// Erzeugung eines Bündels an mathematischen Funktionen $f1 = 'if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}'; $f2 = "return \"min(b^2+a, a^2,b) = \".min($a*$a+$b,$b*$b+$a);"; $f3 = 'if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b;} else {return false;}'; $farr = array( create_function('$x,$y', 'return "als trig: ".(sin($x) + $x*cos($y));'), create_function('$x,$y', 'return "als Hypotenuse: ".sqrt($x*$x + $y*$y);'), create_function('$a,$b', $f1), create_function('$a,$b', $f2), create_function('$a,$b', $f3) );
echo "\nGebrauch des ersten Arrays der anonymen Funktionen\n"; echo "Parameter: 2.3445, M_PI\n"; process(2.3445, M_PI, $farr);
// Erzeugung eines Bündels an String-Behandlungs-Routinen $garr = array( create_function('$b, $a','if (strncmp ($a, $b, 3) == 0) return "** \"$a\" '. 'und \"$b\"\n** Sieht für mich gleich aus! (ansehen der ersten 3 Zeichen)";'), create_function('$a, $b','; return "CRCs: ".crc32($a)." , ".crc32(b);'), create_function('$a, $b','; return "ähnlich(a, b) = ".similar_text($a, $b, &$p)."($p%)";') ); echo "\nGebrauch des zweiten Arrays der anonymen Funktionen\n"; process("Twas brilling and the slithy toves", "Twas the night", $garr);
|
|
wenn sie nun den o.a Code ausführen lassen, wird folgendes
ausgegeben :
Möglicherweise liegt der häufigste Anwendungsfall für Funktionen im
Lambda-Stil (anonym) bei den Callback-Funktionen, also z.B. beim
Gebrauch von array_walk() oder
usort().
Beispiel 3.
Gebrauch der anonymen Funktionen als Callback-Funktion:
$av = array("der ","ein ","dieser ","jener "); array_walk($av, create_function('&$v,$k','$v = $v."Zug";')); print_r($av); // mit PHP3 benutzen sie bitte var_dump() // Ausgaben: // Array // ( // [0] => der Zug // [1] => ein Zug // [2] => dieser Zug // [3] => jener Zug // )
// Ein Array aus Strings nach Länge geordnet $sv = array("kurz","länger","noch länger","dieser ist am längsten"); print_r($sv); // Ausgaben: // Array // ( // [0] => kurz // [1] => länger // [2] => noch länger // [3] => dieser ist am längsten // )
// Sortierung von lang nach kurz usort($sv, create_function('$a,$b','return strlen($b) - strlen($a);')); print_r($sv); // Ausgabe: // Array // ( // [0] => dieser ist am längsten // [1] => noch länger // [2] => länger // [3] => kurz // )
|
|
|
|
|
 |
 |
 |
 |
 |
 |
|
 |