我正在编写一个函数,该函数将用于限制太长的字符串。我想避免重复的代码,所以我认为将几乎整个函数"逻辑"放入返回表达式中将比在每个开关的情况下检查条件更好。但是让我们看看代码:
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时,它总是返回 false。
$a = test('songs_week', 'razdwatrzyczterypiecszescsiedemrazdwatrzyczterypiecszescsiedem');
echo $a;
//razdwatrzyczterypiecszescsiedemrazdwatrzyczterypiecszescsiedem
有人知道吗?:)
$string
未在闭包中定义,您忘记了 return
语句
function ($x, $y) use ($string) {
return strlen($string) >= $y + $x + 1;
};
您在 lambda 中使用$string
,但不将其作为参数传入或将其定义为 lambda 中的global
,因此它是空/空。