PHP IF [FALSE / NULL / EMPTY]功能

时间:2013-04-17 19:31:17

标签: php

在一年左右的时间里,我在所有项目中都有一个函数: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 Template Engine使用类似的东西:

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

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

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

PS:SQL也有IFNULL() =)

3 个答案:

答案 0 :(得分:4)

您的功能基本上等同于a variant of the conditional operator that was added in PHP 5.3

  

从PHP 5.3开始,可以省略三元运算符的中间部分。表达 expr1?:expr3 如果 expr1 评估为 TRUE ,则返回 expr1 ,并且< em> expr3 否则。

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

答案 1 :(得分:2)

是的,如果您的PHP足够新(5.3.0或更新版本)。请参阅PHP documentation on the ternary operator

  

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

因此,虽然上面的代码非常尴尬,但在某些情况下,您可能希望使用此三元运算符的函数版本(例如,用作callable - 在这些情况下,你可以用一个封口滚动:

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

答案 2 :(得分:0)

$var = ifNot($foo, 'is empty or false =(');

与:

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

在普通的PHP(&gt; =版本5.3)中也是如此。你的ifNot功能完全是多余的。

相关问题