-2

大约一年以来,我在所有项目中都有一个名为:ifNot().

这个函数在某种程度上是从三元运算符派生的:

public function ifNot( $item, $ifNot )
{
    if ( !$item ) {
        return $ifNot
    } else {
        return $item;
    }
}
// The var $foo twice
$var = ( $foo ) ? $foo : 'is empty or false =(';
// The var $foo once
$var = ifNot($foo, 'is empty or false =(');

事实上,Twig 模板引擎使用类似的东西:

{{ foo ? 'yes' : 'no' }}

{# as of Twig 1.12.0 #}
{{ foo ?: 'no' }} == {{ foo ? foo : 'no' }}
{{ foo ? 'yes' }} == {{ foo ? 'yes' : '' }}

问题是:这个功能有更好/已知的方法吗?

PS:SQL也有一个IFNULL()=)

4

3 回答 3

4

您的函数本质上等同于 PHP 5.3 中添加的条件运算符的变体

从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式expr1 ?:如果expr1的计算结果为TRUE,则expr3返回expr1 ,否则返回 expr3。

如果您的所有目标环境都是 PHP 5.3 或更高版本,则使用内置方法可能会快一点,但我并不担心。

于 2013-04-17T19:34:32.857 回答
2

是的,如果您的 PHP 足够新(5.3.0 或更高版本)。请参阅有关三元运算符的 PHP 文档

从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。

因此,虽然您上面的代码尴尬,但在某些情况下,您可能需要此三元运算符的函数版本(例如,用作可调用- 在这些情况下,您可以使用闭包滚动:

function($foo, $default) { return $foo ?: $default; }

于 2013-04-17T19:34:20.180 回答
0
$var = ifNot($foo, 'is empty or false =(');

是相同的:

$var = $foo?:'is empty or false =(';

在普通 PHP(>= 5.3 版)中也是如此。您的 ifNot 功能完全是多余的。

于 2013-04-17T19:32:43.403 回答