如何使用lambda函数作为三元运算符的条件

时间:2011-05-09 18:14:21

标签: php lambda ternary-operator

我正在编写一个函数,用于限制太长的字符串。我想避免重复的代码,所以我认为将几乎整个函数“逻辑”放入返回表达式将比检查每个开关的情况更好。但是让我们看看代码:

function test($mode, $string) {
    $x = strlen("...");
    $overThr = function($x, $y){strlen($string) >= $y + $x + 1;}; 

    switch ($mode) {
        case 'artist_week':
            $y = 29;
            break;
        case 'songs_week':
            $y = 31;
            break;
    }
    return (substr($string, 0, $overThr($x, $y) ? $y : strlen($string))) . ($overThr($x, $y) ? "..." : "");
}

正如您所看到的,我希望将$ overThr用作三元运算符中的灵活条件。但我无法弄清楚为什么每次$ overThr在“return”表达式中执行时它总是返回false。

$a = test('songs_week', 'razdwatrzyczterypiecszescsiedemrazdwatrzyczterypiecszescsiedem');
echo $a;
//razdwatrzyczterypiecszescsiedemrazdwatrzyczterypiecszescsiedem
有人知道吗? :)

2 个答案:

答案 0 :(得分:2)

在闭包中没有定义

$string,你忘记了return语句

function ($x, $y) use ($string) {
  return strlen($string) >= $y + $x + 1;
};

答案 1 :(得分:1)

你在lambda中使用$string,但是没有将它作为参数传递或在lambda中将其定义为global,所以它是null / empty。