PHP kézikönyv
Előző |  | Következő

# create_function

(PHP 4 >= 4.0.1, PHP 5)

create_function -- Név nélküli (lambda típusú) függvényt definiál

## Leírás

string create_function ( string args, string code )

Az átadott paraméterek alapján egy anonim - név nélküli függvényt hoz létre. Az args paramétert általában egyszeres idézőjelek közt szokás átadni, és ez ajánlott a code-ra is. Ennek az az oka, hogy az egyszeres idézőjelek közé fogott sztringekre nem aktiválódik a változó-behelyettesítés, máskülönben macskakörmök használata esetén a változó neveket visszaperjelezned kellene, mint például: \$avar.

Ezzel a függvénnyel - például futási időben nyert információk alapján - definiálhatsz új függvényeket:

Példa 1. A create_function() segítségével definiált függvények

`<?php $ujfgv = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);'); echo "Új névtelen függvényünk: $ujfgv\n"; // azért valami neve csak van :) echo $ujfgv(2, M_E) . "\n"; // eredményül kírja: // Új névtelen függvényünk: lambda_1 // ln(2) + ln(2.718281828459) = 1.6931471805599 ?>`

Vagy egy általános kezelőfüggvény megléte esetén műveletek sorozata alkalmazható egy adott paraméterlistára, pl:

Példa 2. Általános feldolgozó függvény létrehozása create_function()-nel.

`<?
function feldolgoz($valtozo1, $valtozo2, $fvtomb)
{
for ($f=0; $f < count($fvtomb); $f++) {
echo $fvtomb[$f]($valtozo1, $valtozo2) . "\n";
}
}
// egy csomó matematikai függvény létrehozása
$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;}';
$fv_tomb = array(
create_function('$x,$y', 'return "ezt nem tudom, mi: ".(sin($x) + $x*cos($y));'),
create_function('$x,$y', 'return "az átfogó: ".sqrt($x*$x + $y*$y);'),
create_function('$a,$b', $f1),
create_function('$a,$b', $f2),
create_function('$a,$b', $f3)
);
echo "\nAz első tömb anonim függvényekkel\n";
echo "paraméterek: 2.3445, M_PI\n";
feldolgoz(2.3445, M_PI, $fv_tomb);
// most egy csomó sztringkezelő függvény létrehozása
$fv_tomb2 = array(
create_function('$b,$a', 'if (strncmp($a,$b,3) == 0) return "** \"$a\" '.
'és \"$b\"\n** nekem azonosnak tűnik! (az első 3 karakter után)";'),
create_function('$a,$b', '; return "CRCs: ".crc32($a)." , ".crc32(b);'),
create_function('$a,$b', '; return "hasonló(a,b) = ".similar_text($a,$b,&$p)."($p%)";')
);
echo "\nA második tömb anonim függvényekkel\n";
feldolgoz("Akkor csillogó és fényes volt.", "Akkor este volt.", $fv_tomb2);
?>`

a fenti kód lefuttatása után a következő fog megjelenni:

    Az első tömb anonim függvényekkel
    paraméterek: 2.3445, M_PI
    ezt nem tudom, mi: -1.6291725057799
    az átfogó: 3.9199852871011
    b*a^2 = 4.8103313314525
    min(b^2+a, a^2,b) = 8.6382729035898
    ln(a/b) = 0.27122299212594

    A második tömb anonim függvényekkel
    ** "Akkor csillogó és fényes volt." és "Akkor este volt."
    ** nekem azonosnak tunik! (az elso 3 karakter utan)
    CRCs: -725381282 , 1908338681
    hasonló(a,b) = 11(45.833333333333%)

Valószínűleg az anonim függvények legáltalánosabb felhasználási módja az ún. 'callback' függvények létrehozása, pl. az array_walk() vagy az usort() számára.

Példa 3. Anonim függvények használata 'callback' függvényként

`<?php $nevelok = array("a ", "egy ", "az ", "ez "); array_walk($nevelok, create_function('&$v,$k', '$v = $v."mangó";')); print_r($av); ?>`

kiírja, hogy:

    Array
    (
      [0] => a mangó
      [1] => egy mangó
      [2] => az mangó
      [3] => ez mangó
    )

String-tömb hossz szerint növekvő sorrendbe rendezése

`<?php $sv = array("rovid", "hosszabb", "egy nagy string", "ez valami sztring dolog"); print_r($sv); ?>`

kiírja, hogy:

    Array
    (
      [0] => rovid
      [1] => hosszabb
      [2] => egy nagy sztring
      [3] => ez valami sztring dolog
    )

sort it from longer to shorter

`<?php usort($sv, create_function('$a,$b','return strlen($b) - strlen($a);')); print_r($sv); ?>`

kiírja, hogy:

    Array
    (
      [0] => ez valami sztring dolog
      [1] => egy nagy sztring
      [2] => hosszabb
      [3] => rovid
    )

Előző | Tartalom | Következő
call_user_func | Fel | func_get_arg