有人可以解释 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
的评估结果。
这在 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
的评估结果。