我正在尝试在简写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设置为函数返回的值?
我知道有一种更简单,更简单的方法。但我很固执,我只是希望我的好奇心得到满足。
答案 0 :(得分:5)
这不是“短手if / else”,而是ternary operator。其次,你实际上并没有调用你的函数,只是将一个或另一个赋值给变量$str
。您需要实际调用生成的函数。
为什么你这样做,我不知道 ......
答案 1 :(得分:4)
您可以使用call_user_func
$str = true ? call_user_func( function(){ return "123"; } ) :
call_user_func( function(){ return "321"; } );
答案 2 :(得分:2)
您要将$str
设置为该函数,而不是其返回值。你需要实际调用该函数。
echo $str();
答案 3 :(得分:2)
如果有人发现它有用,因为PHP 7可以使用类似于以下语法的声明立即调用函数:
$result = (function () { return "Something"; })();
在这种情况下你会这样做:
$str = (true) ? (function() {
//do something
return $result;
})()
:
(function() {
//do something else
return $result;
})();
答案 4 :(得分:1)
三元运算符最终将匿名函数分配给变量$str
,而不是函数执行的结果。所以你需要执行这个功能。
<?php
$str = (true) ? function () { return '123'; } : function () { return 'abc'; };
echo $str();