考虑以下代码行:
<?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手册中解释的位置,我将不胜感激。
答案 0 :(得分:4)
您的字符串'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
如果字符串以有效数字数据开头,则这将是使用的值
答案 1 :(得分:4)
在此代码中:
echo '10 - 7 = '.$x-$y;
串联优先,所以你留下的是:
echo '10 - 7 = 10'-$y;
因为这是尝试用字符串执行整数减法,所以首先将字符串转换为整数,所以你留下这样的东西:
echo (int)'10 - 7 = 10'-$y;
该字符串的整数值为10
,因此生成的算术如下所示:
echo 10-$y;
由于$y
为7
和10 - 7 = 3
,因此回显的结果为3
。
答案 2 :(得分:2)
.
和-
具有相同的precedence,因此PHP将'10 - 7 = 10'
重新解释为数字,给出10
,减去7给出3
}}