一年多以来,我在我所有的项目中都有一个函数叫做: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求值TRUE, expr3否则返回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函数完全是多余的