“$foo = 5 && $bar = 15”是如何求值的,为什么不是错误?
How is "$foo = 5 && $bar = 15" evaluated, and why is it not a error?
假设我们有这样一个简单的代码:
// $foo and $bar aren't defined before
$foo = 5 && $bar = 15;
// var_dump()
// $foo is (bool) TRUE
// $bar is (int) 15
所以我假设它的工作原理如下:
$foo = (5 && ($bar = 15))
但在我看来应该是:
$foo = ((5 && $bar) = 15) // should throw syntax error due FALSE = 15
- 评估表从左到右[$foo 想要 5 但 && 更高]
- && 获得最高优先级 [所以 && 需要 5 和 $bar]
- 5 == 真; $bar == Undefined [所以它是 NULL == FALSE]
- = 获得了正确的关联性 [等待 (5 && $bar) 的评估]
请用最简单的方式(在其他一些例子上)向像我这样的穷人解释一下。问候。
让我们剖析你的代码行:
$foo = 5 && $bar = 15;
首先我想指出 = 是一个赋值运算符,通常 return 为真。
话虽这么说,这细分如下:
$foo = (5 && ($bar = 15))
$foo = (5 && (true))
$foo = ( (true) && (true) )
$foo = (true)
$foo = true
&& 代表 AND 并比较两个布尔值,return如果两者都为真则为真,否则为假。请注意,$bar = 15 的赋值将 return 为真,在 5 的情况下,非零整数也将 return 为真。
我认为阅读此处的手册页有助于清除很多内容。
那么这是如何评估的?
$foo = 5 && $bar = 15;
首先你要知道&&
的优先级高于=
。所以第一个想到的是:
$foo = (5 && $bar) = 15;
但现在是你必须阅读手册直到最后的时刻:http://php.net/manual/en/language.operators.precedence.php
引自那里:
Note:
Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.
这是什么意思?
它默默地将 15 分配给 $bar
例如
$foo = (5 && ($bar = 15));
现在您可以计算 &&
,$bar
赋值为 15,5 && 15
为 TRUE,并且赋值为 $foo
假设我们有这样一个简单的代码:
// $foo and $bar aren't defined before
$foo = 5 && $bar = 15;
// var_dump()
// $foo is (bool) TRUE
// $bar is (int) 15
所以我假设它的工作原理如下:
$foo = (5 && ($bar = 15))
但在我看来应该是:
$foo = ((5 && $bar) = 15) // should throw syntax error due FALSE = 15
- 评估表从左到右[$foo 想要 5 但 && 更高]
- && 获得最高优先级 [所以 && 需要 5 和 $bar]
- 5 == 真; $bar == Undefined [所以它是 NULL == FALSE]
- = 获得了正确的关联性 [等待 (5 && $bar) 的评估]
请用最简单的方式(在其他一些例子上)向像我这样的穷人解释一下。问候。
让我们剖析你的代码行:
$foo = 5 && $bar = 15;
首先我想指出 = 是一个赋值运算符,通常 return 为真。
话虽这么说,这细分如下:
$foo = (5 && ($bar = 15))
$foo = (5 && (true))
$foo = ( (true) && (true) )
$foo = (true)
$foo = true
&& 代表 AND 并比较两个布尔值,return如果两者都为真则为真,否则为假。请注意,$bar = 15 的赋值将 return 为真,在 5 的情况下,非零整数也将 return 为真。
我认为阅读此处的手册页有助于清除很多内容。
那么这是如何评估的?
$foo = 5 && $bar = 15;
首先你要知道&&
的优先级高于=
。所以第一个想到的是:
$foo = (5 && $bar) = 15;
但现在是你必须阅读手册直到最后的时刻:http://php.net/manual/en/language.operators.precedence.php
引自那里:
Note: Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.
这是什么意思?
它默默地将 15 分配给 $bar
例如
$foo = (5 && ($bar = 15));
现在您可以计算 &&
,$bar
赋值为 15,5 && 15
为 TRUE,并且赋值为 $foo