Php 条件中带有赋值的嵌套负if语句
我有以下代码:Php 条件中带有赋值的嵌套负if语句,php,if-statement,conditional-statements,variable-assignment,Php,If Statement,Conditional Statements,Variable Assignment,我有以下代码: if (!$x = some_function(1)) { if (!$x = some_function(2)) { return something; } } 我想知道以下哪种说法是等效的: A 或者如果它本质上是说它应该被覆盖,就像这样: B 这个问题的另一种表述方式是:在if语句中的赋值中,变量是先为false求值,然后为iffalse赋值,还是先赋值,接下来计算的变量?感谢Scuzzy的澄清——看起来合适的等价物是: if (some_
if (!$x = some_function(1)) {
if (!$x = some_function(2)) {
return something;
}
}
我想知道以下哪种说法是等效的:
A
或者如果它本质上是说它应该被覆盖,就像这样:
B
这个问题的另一种表述方式是:在
if
语句中的赋值中,变量是先为false
求值,然后为iffalse
赋值,还是先赋值,接下来计算的变量?感谢Scuzzy的澄清——看起来合适的等价物是:
if (some_function(1)) {
$x = some_function(1));
}
if (!$x && some_function(2)) {
$x = some_function(2));
}
if (!$x) {
return something;
}
第一个语句不等同于其他任何语句。这相当于:
$x = some_function(1); // assign $x first
if(!$x){ // check if $x is falsy
$x = some_function(2); // overwrite $x (not the function itself)
if(!$x){ // check if $x is still falsy
// do stuff
}
}
或者,如果变量不重要,这也是等效的
if(!some_function(1) && !some_function(2)){...}
唯一的区别是第一个始终为$x
提供一个值,该值可能在其他地方使用
这也是同样的,使用三元
$x = some_function(1) ? some_function(1) : some_function(2);
if(!$x) // do stuff
首先分配给$x,然后是条件测试。而且,分配仍在范围内,因此很容易在不经意间泄漏变量。
if(!some_function(1) && !some_function(2)){...}
$x = some_function(1) ? some_function(1) : some_function(2);
if(!$x) // do stuff