php字符串编号连接搞砸了

Jus*_*nHo 12 php string concatenation operator-precedence operator-keyword

我在这里得到了一些PHP代码:

<?php
echo 'hello ' . 1 + 2 . '34';
?> 
Run Code Online (Sandbox Code Playgroud)

输出234,

但是当我在"你好"之前添加一个数字11时:

<?php
echo '11hello ' . 1 + 2 . '34';
?> 
Run Code Online (Sandbox Code Playgroud)

它输出1334而不是245(我预期它),为什么呢?

Bli*_*itZ 15

真奇怪...

<?php
echo '11hello ' . (1 + 2) . '34';
?>
Run Code Online (Sandbox Code Playgroud)

要么

<?php
echo '11hello ', 1 + 2, '34';
?>
Run Code Online (Sandbox Code Playgroud)

解决问题.


UPDv1:

终于设法得到了正确的答案:

'hello' = 0(不包含前导数字,因此PHP假定它为零).

因此'hello' . 1 + 2简化为'hello1' + 2is 2,因为没有前导数字'hello1'也为零.


'11hello '= 11(包含前导数字,因此PHP假设它是11).

因此'11hello ' . 1 + 2简化了'11hello 1' + 211 + 213.


UPDv2:

http://www.php.net/manual/en/language.types.string.php

该值由字符串的初始部分给出.如果字符串以有效数字数据开头,则这将是使用的值.否则,该值将为0(零).有效数字数据是可选符号,后跟一个或多个数字(可选地包含小数点),后跟可选指数.指数是'e'或'E',后跟一个或多个数字.


Yog*_*har 5

您必须()在数学运算中使用:

echo 'hello ' . (1 + 2) . '34'; // output hello334
echo '11hello ' . (1 + 2) . '34'; // output 11hello334
Run Code Online (Sandbox Code Playgroud)


nat*_*per 5

点运算符具有与+和 - 相同的优先级,这可能会产生意外结果.

这在技术上回答了你的问题...如果你想在连接期间将数字视为数字,只需将它们包括在括号中.

<?php
echo '11hello ' . (1 + 2) . '34';
?>
Run Code Online (Sandbox Code Playgroud)

  • 在 PHP 8 中,“+”和“-”现在具有更高的优先级。这样问题就解决了。 (2认同)