2016-07-31 69 views
5

我无法理解'和'PHP运算符的行为。奇怪的行为与PHP'和'运算符

下面是代码:

$condition1 = true; 
$var2 = "var2"; 
$var3 = "var3"; 

$condition2 = $condition1 and $var2 == $var3; 

if($condition2) 
    echo '$condition1 and $var2 == $var3'; 

输出:$条件1和$ VAR2 == $ VAR3

现在很明显的是,由于$var2 != $var3$condition2应该是假的。因此echo声明不应该执行,但它发生在另一种方式。任何人都可以告诉我这段代码有什么问题吗?

+1

'$ condition2 =($ condition1 == true)&&($ va2 == $ var3);' –

回答

5

使用&&而不是and

and&&优先级低。声明

$condition2 = $condition1 and $var2 == $var3;

分两步执行由左到右。

1:$condition2 = $condition1被执行。即$condition2现在是true

2:$var2 == $var3;被执行,其执行评估但不将任何值分配给任何变量。

3

我认为这是一个运算符优先级问题。试试这个:

$condition2 = ($condition1 and $var2 == $var3); 

我认为这个问题是当前的代码被这样解释:

($condition2 = $condition1) and ($var2 == $var3) 
+2

请参阅http://php.net/manual/en/language.operators.precedence.php优先顺序(同时确认@ nad使用'&&'的方法)。 – smarx

2

试试这个 $条件2 =($条件1和$ VAR2 == $ VAR3); 或这一个 $ condition2 =($ condition1 & & $ var2 == $ var3);