PHP concatenation of strings and arithmetic operations

…衆ロ難τιáo~ 提交于 2019-12-07 03:43:34

问题


I started learning PHP not too long ago and I ran into this issue:

<?php

$a = 1;
$b = 2;

echo "$a * $b  = " . $a * $b;
echo "<br />";

echo "$a / $b  = " . $a / $b;
echo "<br />";

echo "$a + $b  = " . $a + $b;
echo "<br />";

echo "$a - $b  = " . $a - $b;
echo "<br />";

I get the following output:

1 * 2 = 2
1 / 2 = 0.5
3
-1

The last two lines in the output are not what I would expect.

Why is this? How are these expressions evaluated? I'm trying to get a better understanding of the language.


回答1:


This is happening because the concatenation operator has a higher precedence than the addition or subtraction operators, but multiplication and division have a higher precedence then concatenation.

So, what you're really executing is this:

echo ("$a + $b  = " . $a) + $b;
echo ("$a - $b  = " . $a) - $b;

In the first case, that gets turned into this:

"1 + 2 = 1" + $b

Which PHP tries to convert "1 + 2 = 1" into a number (because of type juggling) and gets 1, turning the expression into:

1 + 2

Which is why you get 3. The same logic can be applied to the subtraction condition.

Instead, if you put parenthesis around the calculations, you'll get the desired output.

echo "$a + $b  = " . ($a + $b);
echo "$a - $b  = " . ($a - $b);



回答2:


Concatenation takes precedence over addition and subtraction, but not multiplication or division. So

echo "$a + $b  = " . $a + $b;

is equivalent to

echo ("$a + $b  = " . $a) + $b;

And PHP disregards the first part, as it is difficult to convert it into a number, leaving you with just the + $b.

If you use parentheses, you should be fine.




回答3:


Well, you have found really weird behavior, but :)

From the from the arithmetic operators, division and multiplication have highest precedence, so they are evaluated before the concatenation.

While the addition and extraction have lower precedence, so first the left part is evaluated and then added/extracted to the right part. But PHP tries to extract the numeric value out of the string and only the first char is such, so it does that with it.



来源:https://stackoverflow.com/questions/11993240/php-concatenation-of-strings-and-arithmetic-operations

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!