简写if else和匿名函数

时间:2013-07-10 18:59:48

标签: php

我正在尝试在简写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设置为函数返回的值?

我知道有一种更简单,更简单的方法。但我很固执,我只是希望我的好奇心得到满足。

5 个答案:

答案 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();