首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不带括号的字符串级联中的算术操作会导致奇怪的结果。

不带括号的字符串级联中的算术操作会导致奇怪的结果。
EN

Stack Overflow用户
提问于 2011-09-27 19:28:01
回答 3查看 2.8K关注 0票数 4

请考虑以下代码行:

代码语言:javascript
运行
复制
<?php
$x = 10;
$y = 7;

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

它的输出为3,这是计算$x-$y的预期结果。然而,预期的输出是:

10-7=3

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

代码语言:javascript
运行
复制
<?php
$x = 10;
$y = 7;

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

输出

10-7=3

但是,由于PHP不抱怨原始代码,所以我想知道在这种情况下产生的输出背后的逻辑是什么?绳子到哪里去了?如果有人能解释它或指向PHP手册中的一个位置解释它,我将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-27 19:30:53

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

要获得更多解释,请尝试如下:

代码语言:javascript
运行
复制
echo (int) ('10 - 7 = ' . 10); // Prints "10"

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

如果字符串以有效的数字数据开头,则这将是使用的值。

票数 4
EN

Stack Overflow用户

发布于 2011-09-27 19:34:21

在此代码中:

代码语言:javascript
运行
复制
echo '10 - 7 = '.$x-$y;

连接优先,所以您剩下的是:

代码语言:javascript
运行
复制
echo '10 - 7 = 10'-$y;

因为这是试图使用字符串执行整数减法,所以字符串首先被转换为整数,因此您将得到如下内容:

代码语言:javascript
运行
复制
echo (int)'10 - 7 = 10'-$y;

该字符串的整数值为10,因此生成的算术如下所示:

代码语言:javascript
运行
复制
echo 10-$y;

因为$y7,而10 - 7 = 3是回显结果是3

票数 4
EN

Stack Overflow用户

发布于 2011-09-27 19:30:53

.-有相同的优先,所以PHP正将'10 - 7 = 10'重新解释为一个数字,给出10,并减去7给3

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7574624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档