请看下面的代码行:
<?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手册中解释它的位置,我将不胜感激。
4条答案
按热度按时间vhmi4jdf1#
.
和-
具有相同的precedence,因此PHP将'10 - 7 = 10'
重新解释为一个数字,得到10
,减去7得到3
。cgh8pdjw2#
PHP按照这里定义的顺序运行操作;https://www.php.net/manual/en/language.operators.precedence.php
看看这个例子;
注意!这不会给你31分钟前的时间。在这种情况下,PHP只是从表达式的最左边开始解释,所以这个看起来很简单的表达式返回了错误的结果;
因为;
这就是为什么上面的表达式会给出
为了避免这种混淆,可以像这样使用();
nbysray53#
字符串
'10 - 7 = '
与$x
连接,然后被解释为int
,结果为10
,然后减去7
,结果为3
。有关详细说明,请尝试以下操作:
有关字符串到数字转换的详细信息,请访问http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion
如果字符串以有效的数字数据开头,则将使用此值
iyr7buue4#
在此代码中:
连接优先,所以剩下的是:
因为这是尝试对字符串执行整数减法,所以字符串首先被转换成整数,所以你得到了如下的结果:
该字符串的整数值为
10
,因此生成的算术结果如下所示:因为
$y
是7
,并且10 - 7 = 3
,所以回显的结果是3
。