有人能解释一下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返回赋值的值。

如果你做echo $a = 3;你会得到PHP中的3

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

$a = ($b = 4) + 5; // $a is equal to 9 now, and $b has been set to 4.
简单地说,这是该语言及其文档上下文中所期望的行为。Python不采用此行为。 有趣的是,I 也可以在其他非常强大的编程语言中执行此操作。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'连接到$b = $c的php评估结果。