Typo在PHP中产生了意想不到的结果

时间:2011-11-09 19:13:02

标签: php

刚刚发现我的代码中有一个原始拼写错误。

$msg = "Some text";
$msg .= " some more text";
$msg .+ " yet more text!";
$msg .= " last text";

请注意应为.+的{​​{1}}。让我感到惊讶的是,代码运行时没有产生任何错误,警告或通知,输出结果是:

.=

我想知道为什么会这样做。我完全清楚Some text some more text last text.=是什么,但+=如何被解释,因为没有等号。

3 个答案:

答案 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,并忽略了结果。