Du bist hier: Tips » Scripte » PHP
PHP
Referenzliste

create_function

Functions-Funktionen

    Befehl:
string create_function ( string $args, string $code )


    Beschreibung:
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.


    Aktiv in Version:
(PHP 4 >= 4.0.1, PHP 5, PHP 7)

create_function() - Beispiel


Eingabe:
<?php
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);
?>


Ausgabe:
Gebrauch des ersten Arrays der anonymen Funktionen
Parameter: 2.3445, M_PI
als trig: -1.6291725057799
als Hypotenuse: 3.9199852871011
b*a^2 = 4.8103313314525
min(b^2+a, a^2,b) = 8.6382729035898
ln(a/b) = 0.27122299212594

Gebrauch des zweiten Arrays der anonymen Funktionen
** "Twas the night" und "Twas brilling and the slithy toves"
** Sieht f�r mich gleich aus! (ansehen der ersten 3 Zeichen)
CRCs: -725381282 , 1908338681
�hnlich(a,b) = 11(45.833333333333%)
Beispiel


Eingabe:
<?PHP
$array = array ( 2120.789,
                 4300,
                 5980.23,
                 6359.00,
                 123.89,
                 1380.3213,
                 2345 );

$name = array_walk($array, create_function ( '&$c', 'global $d;
  $c = "$d + $c  = " . number_format ( ( $d +=  $c ), 2, ", ", ".");' ) );

for ( $x = 0; $x < count ( $array ); $x++ )
{
    echo 'Addiere: ' . $array[$x] . "\n";
}
?>


Ausgabe:
Berechnung: + 2120.789 = 2.120,79
Berechnung: 2120.789 + 4300 = 6.420,79
Berechnung: 6420.789 + 5980.23 = 12.401,02
Berechnung: 12401.019 + 6359 = 18.760,02
Berechnung: 18760.019 + 123.89 = 18.883,91
Berechnung: 18883.909 + 1380.3213 = 20.264,23
Berechnung: 20264.2303 + 2345 = 22.609,23

Beschreibung:
Mit create_function() k�nnen Sie eine tempor�re Funktion erstellen, in der Sie normalen PHP-Code ausf�hren lassen k�nnen. Der Parameter args enth�lt die Parameterliste der tempor�ren Funktion, der Parameter code den Programmcode (beide als String in einfachen Anf�hrungszeichen). Aus diesen Daten wird eine tempor�re Funktion erstellt, welcher ein eindeutiger Name zugewiesen wird. Diesen Funktionsnamen gibt create_function() als Ergebnis zur�ck. Die Funktion ist sehr empfehlenswert, wenn man dynamisch zur Laufzeit eine Funktion generieren m�chte, etwa weil bestimmte Teile des Codes aus Benutzereingaben generiert werden m�ssen. Im unteren Beispiel wurde mit array_walk() jedes Element des Arrays an die tempor�re (anonyme) Funktion �bergeben. Innerhalb der Funktion wurde der Wert mit der bisherigen Gesamtsumme addiert und mittels der Funktion number_format() formatiert.
Functions-Funktionen