【发布时间】:2011-05-18 19:11:03
【问题描述】:
对于根据表达式的结果为变量赋值的非常常见的情况,我是三元运算符的粉丝:
$foo = $bar ? $a : b;
但是,如果 $bar 是一个相对昂贵的操作,并且如果结果是真的,我想将 $bar 的结果分配给 $foo,这是低效的:
$foo = SomeClass::bigQuery() ? SomeClass::bigQuery() : new EmptySet();
一个选项是:
$foo = ($result = SomeClass::bigQuery()) ? $result : new EmptySet();
但我宁愿不要让额外的$result 留在内存中。
我的最佳选择是:
$foo = ($foo = SomeClass::bigQuery()) ? $foo : new EmptySet();
或者,没有三元运算符:
if(!$foo = SomeClass::bigQuery()) $foo = new EmptySet();
或者,如果程序流操作符不是你的风格:
($foo = SomeClass::bigQuery()) || ($foo = new EmptySet());
这么多选择,没有一个真的令人满意。您会使用哪个,我是否在这里遗漏了一些非常明显的东西?
【问题讨论】:
标签: php ternary-operator