在PHP中是否可以将已执行的函数作为函数的参数传递,以便函数的结果将被移交,而不是回调函数对象?
无需触摸示波器功能(无需评估或执行额外的魔术操作)。
比方说,我要赋予函数的参数不清楚。因此,在确定该功能之前,必须先做出决定。
当前,它总是看起来像这样:
$tmp = ($something == $bla)?42:7;
myFunction($tmp);
对于如此短暂的决定,它并不是那么有问题。但是有时有两种以上的可能性。因此需要if-elseif或开关盒。
只是放这样的东西会更干净:
myFunction(function(){
if(...){ return 42; }
elseif(...){ return 7; }
elseif(...){ return 5; }
elseif(...){ return 12; }
else{ return 1; }
});
因此无需先将其保存到变量中。
仅出于更简洁的代码,减少了$tmp
或$trash
变量。
答案 0 :(得分:2)
Anonymous functions和variable functions应该是您想要的:
匿名函数(也称为闭包)允许创建 没有指定名称的功能。它们是最有用的 回调参数的值,但它们还有许多其他用途。
使用Closure类实现匿名功能
还有一个代码示例:
<?php
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};
$greet('World');
$greet('PHP');
?>
还有一个代码示例,仅出于完整性考虑,关于如何将函数名称作为参数传递,并在后面对其进行调用:
<?php
function here() {
print 'here';
}
function dynamo($name) {
$name();
}
//Will work
dynamo('here');
//Will fail
dynamo('not_here');
上一个示例是从here
中提取的答案 1 :(得分:1)
因此,在对anonymous functions(感谢Lucas Meine)的理解之后,我发现您可以直接在函数中使用方括号将其括起来,然后根据是否为空来使用参数方括号您想在主上下文之外为较低级别的函数提供一些变量。
在以下所有示例中,var_dump
的输出为42
。
// the function that should later be called
function myFunction($test){
var_dump($test);
}
// function call with a executed function as parameter
myFunction((function(){
return 42;
})());
$someVar = 42;
function myFunction($test){
var_dump($test);
}
myFunction((function($tmp){
return $tmp;
})($someVar));
或带有use
语句
$someVar = 42;
function myFunction($test){
var_dump($test);
}
myFunction((function() use ($someVar){
return $someVar;
})());