2

我很好奇是否有可能在 if 语句中将函数的几种可能性串起来,将它们链接到单个变量并返回有效的变量(如果有)。

以下内容不起作用,但它演示了这个想法。我希望以下内容返回2,因为该函数仅在传递给它myFn()时才返回 true 。2

但取而代之的是以下返回true: 1

if ($b = myFn(1) || $b = myFn(2) || $b = myFn(3)) {
    echo 'true: ' . $b;
} else {
    echo 'false: ' . $b;
}

function myFn($a) {
    if ($a == 2) return $a;
    return false;
}

除了添加一系列elseifs,有没有办法在一系列ORs 中将函数串起来,同时只返回成功的一个?

键盘:http ://codepad.org/ldiCxY4j

4

2 回答 2

4

只需将每个作业括在括号中:

(($b = myFn(1)) || ($b = myFn(2)) || ($b = myFn(3)))

请参阅:PHP 运算符优先级

当使用逻辑运算符时,PHP 将结果强制为布尔值。如果没有额外的括号,它会回显,'1'因为回显true会强制'1'.

使用循环可能会更好:

/**
 * Get the first $array value that passes the $test, or else null.
 * @return mixed|null 
 */
function find ($array, $test) {
    foreach ($array as $index => $value) {
        if (call_user_func($test, $value, $index, $array))
            return $value;
    }
}
于 2013-02-28T05:37:21.150 回答
2

对于这样的赋值连接,PHP 有or运算符,它与 . 相同,||优先级低于=. 这意味着

if ($b = myFn(1) or $b = myFn(2) or $b = myFn(3))

被视为:

if (($b = myFn(1)) or ($b = myFn(2)) or ($b = myFn(3)))

尽管

if ($b = myFn(1) || $b = myFn(2) || $b = myFn(3))

被视为:

if ($b = (myFn(1) || $b = (myFn(2) || $b = myFn(3))))
于 2013-02-28T06:19:36.370 回答