doukuanyong1939
2015-10-01 13:37 浏览 45
已采纳

有人能解释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;'
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答 默认 最新

  • 已采纳
    doubu1853 doubu1853 2015-10-01 13:40

    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 
    
    点赞 评论 复制链接分享
  • dongsi5381 dongsi5381 2015-10-01 13:47

    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.

    点赞 评论 复制链接分享

相关推荐