我知道可以使用 PHP 5.3(匿名函数)执行以下操作,但是在旧的 PHP 版本(5.3 之前)中是否有类似的替代方法?
$exampleArray = array(
'func' => function() {
echo 'this is an example';
}
是否可以通过 __call 或首先将函数类型转换为(对象)来做到这一点?另外,我尝试通过给它一个名称来使该函数不匿名,但这似乎不起作用。
我知道可以使用 PHP 5.3(匿名函数)执行以下操作,但是在旧的 PHP 版本(5.3 之前)中是否有类似的替代方法?
$exampleArray = array(
'func' => function() {
echo 'this is an example';
}
是否可以通过 __call 或首先将函数类型转换为(对象)来做到这一点?另外,我尝试通过给它一个名称来使该函数不匿名,但这似乎不起作用。
如果要在 PHP < 5.3 中创建匿名,可以使用
create_function
函数。此外,这里还有关于回调的有趣信息(可能有用)。
使用示例 create_function
# This (function in other variable is only for cleaner code)
$func = create_function('', "echo 'This is example from anoymus function';");
$exampleArray = array(
'func' => $func
);
但是你可以用另一种方式做同样的事情,就像上面的代码一样:
# Create some function
function func()
{
# Do something
echo 'This is example';
}
# Save function name
$func = 'func';
上面的代码创建了做某事的函数,然后我们将函数名存储在变量中(可以作为参数传递等)。
当我们只知道它的名字时调用函数:
第一种方式
$func();
选择
call_user_func($func);
因此,连接上述所有内容的示例:
function primitiveArrayStep(&$array, $function)
{
# For loop, foreach can also be used here
for($i = 0; $i < count($array);$i++)
{
# Check if $function is callable
if( is_callable($function) )
{
# Call function
$function(&$array[$i]);
}
else
{
# If not, do something here
}
}
}
并使用上述功能:
$array = array('a', 'b', 'c');
$myFunction = create_function('&$e', '$e = $e . " and i was here";');
primitiveArrayStep($array, $myFunction);
echo '<pre>';
var_dump($array);
回报:
array(3) {
[0]=>
string(16) "a and i was here"
[1]=>
string(16) "b and i was here"
[2]=>
string(16) "c and i was here"
}
链接:
是的,可以使用create_function使用 PHP pre 5.3创建lamda函数。不可能创建您的问题提到但实际上并未使用的闭包。
闭包是一个lamda 函数,它可以从它的封闭范围访问(关闭)一个变量:
$t = new Thingy;
$func = function( $y ) use( $t ) {
//$t is available here when this function is called;
}
lamda函数是一个匿名函数,可用于存储在变量中或作为参数传递等。您可以create_function()
像这样使用 5.3 之前的版本:
$func = create_function( '$y', 'echo $y;' );
//similar to
$func = function( $y ){ echo $y };
$exampleArray = array(
'func' => create_function('', 'echo "this is an example"');
);
仅仅创建一个使用“func”作为类方法的类怎么样?将在 5.3 之前或之后工作。