有人能解释Php中奇怪的行为吗? [关闭]

This is not possible in 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
>>>

I can test the same in C, C++, Java and JavaScript...

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

But can someone explain me why this works in Php, and why?

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

When an assignment happens, PHP returns the value that was assigned.

So if you were to do echo $a = 3; you would get 3 in the PHP out.

Another example from the same docs linked above:

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

Simply put, it's desired behaviour in the context of the language and its documentation. Python doesn't adopt this behaviour.

Interestingly, I can also do this with other quite powerful programming languages. Here's Ruby:

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

You may say that is an unfortunate feature that can induce you to an error, but nothing is wrong with syntax. PHP evaluates this as an assignment expression. When you say $a = 'some string' . $b = $c you are concatenating 'some string' to php evaluation result for $b = $c.