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

标签 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

有人知道吗? :)

最佳答案

$string 未在闭包中定义,并且您忘记了 return 语句

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

关于php - 如何使用 lambda 函数作为三元运算符中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5940781/

相关文章:

php - 搜索结果不显示 PHP MySql

c# - 如何使用 lambda 表达式同时获取属性 "path"和值?

java - 在 lambda 主体中实例化变量

javascript 三元运算符与 if/else 相反

Java - 三元运算符奇怪的行为

c++ - 三元运算符

php - Codeigniter 中多语言管理员的 linux 权限问题

php - 更改数据库中显示名称的顺序

php - 如何在 PHP 中使用 DOMDocument 检测 XML 元素是否为空?

python - 如何在 Graphlab SFrame 中通过划分两列来创建新列?