猿问

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

在 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变量。


UYOU
浏览 177回答 2
2回答

HUWWW

匿名函数和变量函数应该是您正在寻找的:匿名函数,也称为闭包,允许创建没有指定名称的函数。它们作为回调参数的值最有用,但它们还有许多其他用途。匿名函数使用 Closure 类实现还有一个代码示例:<?php$greet = function($name){&nbsp; &nbsp; printf("Hello %s\r\n", $name);};$greet('World');$greet('PHP');?>还有一个代码示例,为了完整起见,关于如何将函数名作为参数传递,并在后面调用它:<?phpfunction here() {&nbsp; print 'here';}function dynamo($name) {&nbsp;$name();}//Will workdynamo('here');//Will faildynamo('not_here');

海绵宝宝撒

所以随着对匿名函数的理解(感谢Lucas Meine),我发现你可以直接执行一个函数,方法是用括号括起来,后面跟着参数括号,这取决于你是否想给低级函数一些主要上下文之外的变量。在以下所有示例中,输出var_dump为42。没有可变参数的例子// the function that should later be calledfunction myFunction($test){&nbsp; &nbsp; var_dump($test);}// function call with a executed function as parametermyFunction((function(){&nbsp; &nbsp; return 42;})());带有可变参数的示例$someVar = 42;function myFunction($test){&nbsp; &nbsp; var_dump($test);}myFunction((function($tmp){&nbsp; &nbsp; return $tmp;})($someVar));或与use声明$someVar = 42;function myFunction($test){&nbsp; &nbsp; var_dump($test);}myFunction((function() use ($someVar){&nbsp; &nbsp; return $someVar;})());
随时随地看视频慕课网APP
我要回答