3

我正在尝试在 if else 语句的速记中使用匿名函数。

$str = (true) ? function() { 
    //do something
    return $result;
}
:
function() {
    //do something else
    return $result;
};
echo $str;

这会引发Object of class Closure could not be converted to string错误,因为速记 if/else 将函数存储在 $str 变量中。

如何让函数执行,然后将 $str 设置为函数返回的值?

我知道肯定有一种更容易和更简单的方法来做到这一点。但我很固执,我只想满足我的好奇心。

4

5 回答 5

6

您可以使用 call_user_func

$str = true ? call_user_func( function(){ return "123"; } ) : 
              call_user_func( function(){ return "321"; } ); 
于 2013-07-10T19:07:23.400 回答
5

这不是“短手 if/else”,而是三元运算符。其次,您实际上并没有调用您的函数,只是将一个或另一个分配给变量$str。您需要实际调用生成的函数。

你为什么要这样做,我不知道......

于 2013-07-10T19:01:07.260 回答
4

万一有人发现它很有用,因为 PHP 7 可以使用类似于以下的语法在声明后立即调用函数:

$result = (function () { return "Something"; })();

在这种情况下,你会这样做:

$str = (true) ? (function() { 
    //do something
    return $result;
})()
:
(function() {
    //do something else
    return $result;
})();
于 2017-08-04T08:00:15.557 回答
2

您正在设置$str函数,而不是其返回值。您需要实际调用该函数。

echo $str();
于 2013-07-10T19:01:28.107 回答
1

三元运算符最终将匿名函数分配给变量$str,而不是函数执行的结果。因此,您需要执行该功能。

<?php
$str = (true) ? function () { return '123'; } : function () { return 'abc'; };
echo $str();
于 2013-07-10T19:02:23.750 回答