我正在写一个函数,用于限制太长的字符串。我想避免重复的代码,所以我认为将几乎整个函数“逻辑”放入返回表达式中比在每个开关的情况下检查条件要好。但让我们看看代码:如何使用lambda函数作为三元运算符的条件
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作为三元运算符中的灵活条件。但我不明白为什么每次在$ returnThr中执行$ overThr都会返回false。
$a = test('songs_week', 'razdwatrzyczterypiecszescsiedemrazdwatrzyczterypiecszescsiedem');
echo $a;
//razdwatrzyczterypiecszescsiedemrazdwatrzyczterypiecszescsiedem
有人知道吗? :)
题外话,但可维护性的缘故,你应该打破return语句成多行。 (当然,你一眼就明白了,但在六个月内......) – 2011-05-09 18:19:05
是的,这也是很好的提示。我想这也会对那些回答这个问题的人有所帮助:) – 2011-05-09 18:36:42