我在这里得到了一些PHP代码:
<?php
echo 'hello ' . 1 + 2 . '34';
?>
输出234,
但是当我在“你好”之前加上一个数字11时:
<?php
echo '11hello ' . 1 + 2 . '34';
?>
它输出1334而不是245(我预期它),为什么会这样?
答案 0 :(得分:13)
那很奇怪......
但是
<?php
echo '11hello ' . (1 + 2) . '34';
?>
OR
<?php
echo '11hello ', 1 + 2, '34';
?>
解决问题。
<强> UPDv1: 强>
最后设法得到了正确答案:
'hello'
= 0
(不包含前导数字,因此PHP假定它为零)。
所以'hello' . 1 + 2
简化为'hello1' + 2
2
,因为'hello1'
中的前导数字也不为零。
'11hello '
= 11
(包含前导数字,因此PHP假设它是11位)。
所以'11hello ' . 1 + 2
简化为'11hello 1' + 2
,11 + 2
为13
。
<强> UPDv2: 强>
http://www.php.net/manual/en/language.types.string.php
该值由字符串的初始部分给出。如果是字符串 从有效的数字数据开始,这将是使用的值。 否则,该值将为0(零)。有效的数字数据是 可选符号,后跟一个或多个数字(可选地包含一个 小数点),后跟可选的指数。指数是一个 'e'或'E'后跟一个或多个数字。
答案 1 :(得分:5)
点运算符与+和 - 具有相同的precedence,这可能会产生意外结果。
技术上回答你的问题...如果你想在连接期间将数字视为数字,只需将它们包在括号中。
<?php
echo '11hello ' . (1 + 2) . '34';
?>
答案 2 :(得分:4)
你必须在数学运算中使用()
echo 'hello ' . (1 + 2) . '34'; // output hello334
echo '11hello ' . (1 + 2) . '34'; // output 11hello334
答案 3 :(得分:1)
你应该检查PHP类型转换表,以便更好地了解幕后发生的事情:http://php.net/manual/en/types.comparisons.php
答案 4 :(得分:1)
如果你讨厌将操作员分配给变量
$var = 1 + 2;
echo 'hello ' . $var . '34';