有人可以解释 Php 中的奇怪行为吗?

Can someone explain weird behavior in Php?

这在 Python 中是不可能的:

Python 2.7.3
[GCC 4.7.2] on linux2
>>> b = 15
>>> a = 15 + b = 16
  File "<stdin>", line 1
SyntaxError: can't assign to operator
>>>

我可以在 C、C++、Java 和 JavaScript 中测试相同的...

var b=15 ; var a = 15+ b = 15
VM155:2 Uncaught ReferenceError: Invalid left-hand side in assignment(…)

但是有人能解释一下为什么这在 Php 中有效吗?

php -r '$b = 15; $a = "45". $b = 15;'

当分配发生时,PHP returns the value that was assigned

因此,如果您要执行 echo $a = 3;,您将在 PHP 中得到 3

来自上面链接的同一文档的另一个示例:

$a = ($b = 4) + 5; // $a is equal to 9 now, and $b has been set to 4.

简而言之,这是语言及其文档上下文中的期望行为。 Python 不采用这种行为。

有趣的是,我可以用其他非常强大的编程语言也能做到这一点。这是 Ruby:

vagrant@ubuntu-14:/vagrant$ irb
2.1.2 :001 > a = (b = 4) + 5
 => 9 
2.1.2 :002 > b
 => 4 

您可能会说这是一个不幸的特性,可能会导致您出错,但语法并没有错。 PHP 将其评估为赋值表达式。当您说 $a = 'some string' . $b = $c 时,您正在将 'some string' 连接到 php $b = $c 的评估结果。