Echo声明没有出来,因为我想要它

时间:2014-12-20 22:18:25

标签: php

此代码仅打印出“17”而不是“10 + 7 = 17”。为什么是这样?我怎么能解决这个问题。

<?

$x = 10;
$y = 7;

echo $x . '+' . $y . '=' . $x+$y;

?>

2 个答案:

答案 0 :(得分:11)

你应该理解的是echo在评估给出的整个表达式的结果之前不会做任何事情。该表达式包含.+ 运算符 - 第一个连接其操作数(将两个字符串粘合在一起),第二个添加数字。

现在,您可能认为+运算符的优先级高于.运算符 - 换句话说,$x + $y的结果将在(最终)粘贴到echo ($x . '+' . $y . '=' . $x) + $y; 之前计算出来。其余的字符串。但事实并非如此。所以我们可以说这句话实际上被视为......

$x . '+' . $y . '=' . $x

换句话说,所有字符串连接的结果被添加(转换为数字)到$ y,并且只打印此操作的结果。

'10+7=10'的结果是10,并且它看起来不像是添加的。但是猜猜看,PHP希望对你好 - 而且它假设你在尝试将字符串转换为数字时实际上想要提取字符串的第一个数字。因此整行被视为数字7。当添加到.时,它只有17 - 这就是为什么你有17个回应。

一种可能的解决方法是删除,,改为使用echo $x, '+', $y, '=', $x + $y; 运算符(因为它的优先级较低 - 事实上,它是lowest among operators):

echo "$x + $y = ", $x + $y;

如果人们记住PHP的一个方便功能就像字符串插值那样可以简化:

{{1}}

答案 1 :(得分:0)

<?php
$x = 10;
$y = 7;
function sum($a,$b){
    return $a+$b;
}
echo $x.'+'.$y.'='.sum($x,$y);
?>