PHP中是否有简写:
function a() {...}
function b() {...}
$c = a();
$c = ($c) ? $c : b();
在javascript中你可以做到:
$c = a() || b();
但在PHP中,如果你这样做,$c
将是boolean
(这是正常的,但我想知道是否存在另一种做我想做的简写)。
更新
谢谢你们所有答案。
最简单的方法似乎是:
$c = a() ?: b();
我个人也喜欢:
$c = a() or $c = b();
为了良好的可读性。
答案 0 :(得分:3)
这可能有效:
$c = ($c) ? : b();
答案 1 :(得分:2)
不可能像在Javascript中那样做,但你可以使用三元构造的简短版本:
$c = a() ?: b();
另一种方法是使用or
的优先级较低。它不是那么漂亮,但实际上它更接近于你如何在Javascript中实现它:
$c = a() or $c = b();
表示上述内容的另一种方式是将其包装在括号中,以便更容易理解:
($c = a()) or ($c = b());
赋值运算符=具有比“or”运算符更高的优先级(尽管不要将它与||
运算符混淆),这意味着or
之后的部分将不会被执行如果第一部分评估为true
。它基本上与此相同:
if ($c = a()) {
// Do nothing
} elseif ($c = b()) {
// Do nothing
}
这两个表达式都是评估为true
或false
的分配。如果第一个表达式为true
,则$c
将为a()
。否则,将尝试第二个表达式,因为它是最后一个表达式,并且因为之后没有任何操作,$c
将等于b()
。
无论如何,这不是一个真正重要的问题。如果你花时间担心变量赋值的美学,那么你就不必担心正确的事情了。
答案 2 :(得分:1)
我喜欢这种方式,但这是一个偏好问题
if( !$c=a() ){
$c=b();
}
,如
if(!$User=$db->getUserFromID($user_id)){
$User=$db->getUserFromUsername($username);
}
答案 3 :(得分:1)
有可能像这样使用黑魔法。我更喜欢用更长的形式写它。
function a() {
return false;
}
function b() {
return true;
}
($c = a()) || ($c = b());
echo $c;
答案 4 :(得分:1)
你可以这样做:
$c = a() OR $c = b();
答案 5 :(得分:1)
答案 6 :(得分:-1)
我假设你在寻找这个。
http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary
$c = a() ? $c : b();
我不确定你的目的是什么。