PHP IF[FALSE/NULL/EMPTY] function


PHP IF[FALSE/NULL/EMPTY] function

一年多以来,我在我所有的项目中都有一个函数叫做: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() =)

您的函数本质上相当于PHP 5.3中添加的条件操作符的变体:

从PHP 5.3开始,可以省略三元操作符的中间部分。表达式expr1 ?: expr3返回expr1如果expr1求值TRUEexpr3否则返回expr1

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

是的,如果你的PHP足够新(5.3.0或更新)。请参阅PHP文档中有关三元操作符

的内容。

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

因此,尽管上面的代码相当笨拙,但在某些情况下,您可能需要这个三元操作符的函数版本(例如,用作可调用对象),在这些情况下,您可以使用闭包:

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

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

等于:

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

在普通PHP(>=版本5.3)中也是。你的ifNot函数完全是多余的