[英]PHP string number concatenation messed up
我在这里得到了一些 PHP 代码:
<?php
echo 'hello ' . 1 + 2 . '34';
?>
输出 234,
但是当我在“你好”之前添加一个数字 11 时:
<?php
echo '11hello ' . 1 + 2 . '34';
?>
它输出 1334 而不是 245(我期望它)。 这是为什么?
那很奇怪...
但
<?php
echo '11hello ' . (1 + 2) . '34';
?>
要么
<?php
echo '11hello ', 1 + 2, '34';
?>
解决了这个问题。
更新 v1:
我终于设法得到了正确的答案:
'hello'
= 0
(不包含前导数字,因此 PHP 假定它为零)。
所以'hello' . 1 + 2
'hello' . 1 + 2
简化为'hello1' + 2
is 2
。 因为'hello1'
中没有任何前导数字,所以它也为零。
'11hello '
= 11
(包含前导数字,因此 PHP 假定它是 11)。
所以'11hello ' . 1 + 2
'11hello ' . 1 + 2
简化为'11hello 1' + 2
因为11 + 2
是13
。
更新 v2:
从字符串:
该值由字符串的初始部分给出。 如果字符串以有效的数字数据开头,这将是使用的值。 否则,该值将为 0(零)。 有效的数字数据是一个可选的符号,后跟一个或多个数字(可选地包含小数点),后跟一个可选的指数。 指数是“e”或“E”后跟一位或多位数字。
点运算符与+
和-
具有 相同的优先级,这可能会产生意想不到的结果。
从技术上讲,这回答了您的问题……如果您希望在连接期间将数字视为数字,只需将它们括在括号中。
<?php
echo '11hello ' . (1 + 2) . '34';
?>
您必须在数学运算中使用()
:
echo 'hello ' . (1 + 2) . '34'; // output hello334
echo '11hello ' . (1 + 2) . '34'; // output 11hello334
您应该检查PHP 类型转换表以更好地了解幕后发生的事情。
如果您讨厌将运算符放在两者之间,请将它们分配给一个变量:
$var = 1 + 2;
echo 'hello ' . $var . '34';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.