为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 执行函数作为函数的参数

PHP 执行函数作为函数的参数

PHP
UYOU 2022-06-11 09:49:45
在 PHP 中是否可以将执行的函数作为函数的参数传递,以便函数的结果将被移交而不是回调函数对象?无需触及范围功能(没有 eval 或额外的魔法执行)。比方说,我要给函数的参数不清楚。因此,在赋予该功能之前必须对此做出决定。目前这总是看起来像这样:$tmp = ($something == $bla)?42:7;myFunction($tmp);对于这么短的决定,它不是那么成问题。但有时有两种以上的可能性。所以需要一个 if-elseif,或者一个 switch-case。但是像这样放一些东西会更干净:myFunction(function(){    if(...){ return 42; }    elseif(...){ return 7; }    elseif(...){ return 5; }    elseif(...){ return 12; }    else{ return 1; }});因此,无需先将其保存到变量中。只是为了更简洁的代码,更少$tmp或$trash变量。
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

匿名函数变量函数应该是您正在寻找的:

匿名函数,也称为闭包,允许创建没有指定名称的函数。它们作为回调参数的值最有用,但它们还有许多其他用途。

匿名函数使用 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');


查看完整回答
反对 回复 2022-06-11
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

所以随着对匿名函数的理解(感谢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;

})());


查看完整回答
反对 回复 2022-06-11
  • 2 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信