create_function

create_function -- Create an anonymous (lambda-style) function

Description

string create_function ( string args, string code)

Ejemplo 1 .




Or, perhaps to have general handler function that can apply a set of operations to a list of parameters:

Ejemplo 2 .

 
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

 
:







and when you run the code above, the output will be:











But perhaps the most common use for of lambda-style (anonymous) functions is to create callback functions, for example when using array_walk() or usort()

Ejemplo 3 .

 
$av

 
=

 
array(

 
"the

 
"

 
,"a

 
"

 
,"that

 
"

 
,"this

 
")

 
;

 
array_walk($av

 
,

 
create_function(

 
'

 
$v,$k'

 
,'$v

 
=

 
$v

 
."mango"

 
;'))

 
;

 
print_r($av)

 
;

 
/

 
/

 
for

 
PHP3

 
use

 
var_dump(

 
)

 
/

 
/

 
outputs

 
:

 
/

 
/

 
Array

 
/

 
/

 
(

 
/

 
/

 
[0

 
]

 
=

 
the

 
mango

 
/

 
/

 
[1

 
]

 
=

 
a

 
mango

 
/

 
/

 
[2

 
]

 
=

 
that

 
mango

 
/

 
/

 
[3

 
]

 
=

 
this

 
mango

 
/

 
/

 
)

 
/

 
/

 
an

 
array

 
of

 
strings

 
ordered

 
from

 
shorter

 
to

 
longer

 
$sv

 
=

 
array("small"

 
,"larger"

 
,"a

 
big

 
string"

 
,"it

 
is

 
a

 
string

 
thing")

 
;

 
print_r($sv)

 
;

 
/

 
/

 
outputs

 
:

 
/

 
/

 
Array

 
/

 
/

 
(

 
/

 
/

 
[0

 
]

 
=

 
small

 
/

 
/

 
[1

 
]

 
=

 
larger

 
/

 
/

 
[2

 
]

 
=

 
a

 
big

 
string

 
/

 
/

 
[3

 
]

 
=

 
it

 
is

 
a

 
string

 
thing

 
/

 
/

 
)

 
/

 
/

 
sort

 
it

 
from

 
longer

 
to

 
shorter

 
usort($sv

 
,

 
create_function('$a,$b'

 
,'return

 
strlen($b

 
)

 
-

 
strlen($a)

 
;'))

 
;

 
print_r($sv)

 
;

 
/

 
/

 
outputs

 
:

 
/

 
/

 
Array

 
/

 
/

 
(

 
/

 
/

 
[0

 
]

 
=

 
it

 
is

 
a

 
string

 
thing

 
/

 
/

 
[1

 
]

 
=

 
a

 
big

 
string

 
/

 
/

 
[2

 
]

 
=

 
larger

 
/

 
/

 
[3

 
]

 
=

 
small

 
/

 
/

 
)