刚刚发现我的代码中有一个原始拼写错误。
$msg = "Some text";
$msg .= " some more text";
$msg .+ " yet more text!";
$msg .= " last text";
请注意应为.+
的{{1}}。让我感到惊讶的是,代码运行时没有产生任何错误,警告或通知,输出结果是:
.=
我想知道为什么会这样做。我完全清楚Some text some more text last text
和.=
是什么,但+=
如何被解释,因为没有等号。
答案 0 :(得分:10)
没有.+
运算符,因此.
后跟+
。
您正在构建一个由$msg
组成的表达式,该表达式与将一元+
应用于" yet more text!"
(which is 0
,因为转换为整数)的结果相连接。然后丢弃整件事,因为你没有对结果做任何事情。
$msg .+ " yet more text!";
$msg . +" yet more text!"; // 1. PHP doesn't care about the spacing
$msg . 0; // 2. Conversion to int from unary `+`
$msg . "0"; // 3. Coersion to string for concatenation
// 4. Nothing done with value
这完全有效;它只是没有做任何有用的事情。
答案 1 :(得分:2)
+
被解释为一元加号。 PHP将字符串转换为值为0的整数,并将其与$msg
连接。但是,您不会在该行上分配$msg
任何内容,因此$msg
不会更改。
答案 2 :(得分:1)
这是有效的,因为.
是连接运算符,+
是加法运算符。
这条线的解释如下:
$msg . (+" yet more text!");
表达式+" yet more text!"
将字符串转换为int(0
,在这种情况下,当PHP将字符串转换为int时,它将停在第1个非数字字符处)。然后,它将0
汇总到$msg
,并忽略了结果。