create_function

create_function -- Vytvořit anonymní (lambda-style) funkci

Popis

string create_function ( string args, string code)

Z předaných argumentů vytvoří anonymní funkci , a vrátí unikátní název této funkce . args se obvykle předává jako string v jednoduchých uvozovkách , a doporučujeme to i pro code . Důvodem pro jednoduché uvozovky je ochrana názvů proměnných před parsováním , pokud použijete dvojité uvozovky , budete muset oescapovat názvy proměnných , např . \$avar .

Tuto funkci můžete ( například ) použít k vytvoření funkce z dat shromážděných za běhu programu :

Příklad 1 . Vytvoření anonymní funkce pomocí create_function( )

 
$newfunc

 
=

 
create_function(

 
'$a,$b'

 
,'return

 
"ln($a

 
)

 
+

 
ln($b

 
)

 
=

 
".log($a

 
*

 
$b)

 
;')

 
;

 
echo

 
"New

 
anonymous

 
function

 
:

 
$newfunc\n"

 
;

 
echo

 
$newfunc(2,M_E)

 
."\n"

 
;

 
/

 
/

 
výstup

 
/

 
/

 
New

 
anonymous

 
function

 
:

 
lambda_1

 
/

 
/

 
ln(2

 
)

 
+

 
ln(2.718281828459

 
)

 
=

 
1.6931471805599



Nebo třeba k vytvoření obecného handleru, který na předané argumenty aplikuje sadu operací:

Příklad 2 . Vytvoření obecné zpracující funkce pomocí create_function( )

 
function

 
process(

 
$var1

 
,

 
$var2

 
,

 
$farr

 
)

 
{

 
for

 
($f=0

 
;

 
$f

 
count($farr)

 
;

 
$f++

 
)

 
echo

 
$farr[$f]($var1,$var2)

 
."\n"

 
;

 
}

 
/

 
/

 
create

 
a

 
bunch

 
of

 
math

 
functions

 
$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

 
"some

 
trig

 
:

 
"

 
.(sin($x

 
)

 
+

 
$x*cos($y))

 
;')

 
,

 
create_function('$x,$y'

 
,

 
'return

 
"a

 
hypotenuse

 
:

 
".sqrt($x*$x

 
+

 
$y*$y)

 
;')

 
,

 
create_function('$a,$b'

 
,

 
$f1)

 
,

 
create_function('$a,$b'

 
,

 
$f2)

 
,

 
create_function('$a,$b'

 
,

 
$f3

 
)

 
)

 
;

 
echo

 
"\nUsing

 
the

 
first

 
array

 
of

 
anonymous

 
functions\n"

 
;

 
echo

 
"parameters

 
:







když spustíte výšeuvedený kód, výstup bude:











Ale zřejmě nejběžnějším využitím lambda-style (anonymních) funkcí je tvorba callback funkcí, např. pro použití v array_walk() nebo usort()

Příklad 3 . Využití anonymních funkcí jako callback funkcí