php - 不带括号的字符串连接中的算术运算会导致奇怪的结果

标签 php concatenation arithmetic-expressions

考虑以下代码行:

<?php
$x = 10;
$y = 7;

echo '10 - 7 = '.$x-$y;
?>

那个的输出是3,也就是计算$x-$y的预期结果。然而,预期的输出是:

10 - 7 = 3

因此,我的问题是,我与计算连接的字符串发生了什么?我知道为了产生我期望的结果,我需要将算术运算括在括号中:

<?php
$x = 10;
$y = 7;

echo '10 - 7 = '.($x-$y);
?>

输出

10 - 7 = 3

但由于 PHP 不会提示原始代码,我想知道在这种情况下生成的输出背后的逻辑是什么?弦去哪儿了?如果有人能解释它或指出 PHP 手册中解释它的位置,我将不胜感激。

最佳答案

您的字符串 '10 - 7 = ' 正在与 $x 连接。然后它被解释为 int,结果为 10,然后减去 7,结果为 3

更多解释,试试这个:

echo (int) ('10 - 7 = ' . 10); // Prints "10"

有关字符串到数字转换的更多信息,请访问 http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion

If the string starts with valid numeric data, this will be the value used

关于php - 不带括号的字符串连接中的算术运算会导致奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7574624/

相关文章:

php - 表单在 div 中以空操作提交

php - 使用托管/镜像区域互联网注册 IP 数据库查询 IP 国家

c - 为什么这些括号在C语言中给出不同的答案?

c - 64 位数学运算,不会丢失任何数据或精度

java - 大数的模块化归约

php - 下个月在 PHP 中出错

php - 样式化 WordPress 自定义导航菜单

python - 连接两个数据帧并根据条件删除重复行

mysql - 使用从另一个表连接的数据批量更新 MySQL 表

javascript - Javascript concat() 方法中第一个参数的用途是什么?