4

Let's say we got a simple code like this:

// $foo and $bar aren't defined before

$foo = 5 && $bar = 15;

// var_dump()
// $foo is (bool) TRUE
// $bar is (int) 15

so I assume it works like:

$foo = (5 && ($bar = 15))

but in my opinion it should be:

$foo = ((5 && $bar) = 15) // should throw syntax error due FALSE = 15
  1. evaluation form left to right [$foo want 5 but && is higher]
  2. && got the highest priority [so && takes 5 and $bar]
    • 5 == TRUE; $bar == Undefined [so it's NULL == FALSE]
  3. = got the right associativity [waits for evaluation of (5 && $bar)]

Please explain it in easiest way (on some other examples) to poor man like me. Regards.

4

2 回答 2

3

我认为阅读这里的手册页可以帮助并清除很多事情。

那么这个得到的评价如何呢?

$foo = 5 && $bar = 15;

首先,您必须知道&&的优先级高于=。所以第一个想法是这样的:

$foo = (5 && $bar) = 15;

但现在是你必须阅读手册直到结束的地方:http: //php.net/manual/en/language.operators.precedence.php

并从那里引用:

注意: 虽然 = 的优先级低于大多数其他运算符,但 PHP 仍然允许类似于以下的表达式:if (!$a = foo()),在这种情况下,foo() 的返回值被放入 $a。

这意味着什么?

它默默地将 15 分配给$bar例如

$foo = (5 && ($bar = 15));

现在您可以评估&&, $barget 分配 15 并且5 && 15是 TRUE 并且 get 分配给$foo

于 2015-02-19T17:32:00.890 回答
0

让我们剖析您的代码行:

 $foo = 5 && $bar = 15;

首先我想指出 = 是一个赋值运算符,通常会返回 true。

话虽如此,这分解如下:

$foo = (5 && ($bar = 15))
$foo = (5 && (true))
$foo = ( (true) && (true) )
$foo = (true)
$foo = true

&& 代表 AND 并比较两个布尔值,如果两者都为 true,则返回 true,否则返回 false。请注意,$bar = 15 的赋值将返回 true,在 5 的情况下,非零整数也返回 true。

于 2015-02-19T16:52:35.847 回答