6

这种行为在 PHP 中是否正确?

<?php echo '-' . 1 + 1 . ' crazy cats'; ?>
// Outputs:
0 crazy cats

我知道减号被连接到第一个'1'和'-1'转换为整数,而不是'2'到字符串。

请解释原因。

解决它的最佳方法是什么?这个?

<?php echo '-' . (string)1 + 1 . ' crazy cats'; ?>
4

5 回答 5

6

首先,它是正确的,如果它不同,它也是正确的,这就是 PHP 开发人员定义操作数优先级的方式。
在这种情况下,没有操作数具有优先级,所以你从左到右阅读它

  1. '-' . 1 ==> '-1'
  2. '-1' + 1 ==> 0(对字符串的算术运算,将尝试先将它们转换为数字,然后再进行算术运算)。
  3. 0 . ' crazy cats' ==> "0 crazy cats"(对数字的字符串操作,会将它们转换为字符串)。
于 2012-07-19T01:52:39.023 回答
4

如果你想要-2个疯猫,你可以用括号设置操作优先级:

echo '-' . (1 + 1) . ' crazy cats';
于 2012-07-19T01:54:49.213 回答
3

echo也遵循将echo 'foo', 'bar'项目分成不同的陈述以呼应的构造。在这种情况下,您不必担心连接顺序。

所以你可以这样做<?php echo '-', (1 + 1), ' crazy cats'; ?>,你的猫不会在乎底片!

于 2012-07-19T02:28:36.540 回答
1

你的措辞已关闭。'-'不是被铸造而是被连接的。

PHP 仍将(string) 1and-1视为整数。

.并且+/-在 PHP 中具有相同的优先级,因此可以从左到右读取字符串。

上面类似于说:

echo '-1' + '1 crazy cats';
于 2012-07-19T01:53:59.037 回答
1

如果您愿意,这可以避免优先级:

printf('-%d crazy cats',1+1);
于 2012-07-19T03:09:38.030 回答