PHP串联优先级


PHP concatenation precedence

这种行为在PHP中正确吗?

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

我知道minus被连接到第一个"1","-1"被转换为integer,而不是"2"被转换成字符串。

请解释原因。

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

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

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

  1. '-' . 1 ==> '-1'
  2. '-1' + 1 ==> 0(对字符串进行算术运算,将尝试先将其转换为数字,然后再进行算术运算)
  3. 0 . ' crazy cats' ==> "0 crazy cats"(对数字进行字符串运算,将它们强制转换为字符串)

如果你想要-2只疯狂的猫,你可以用括号设置操纵优先级:

echo '-' . (1 + 1) . ' crazy cats';

echo还遵循echo 'foo', 'bar'的构造,该构造将项分离为不同的语句以进行回显。在这种情况下,您不必担心串联顺序。

所以你可以做<?php echo '-', (1 + 1), ' crazy cats'; ?>,你的猫就不会在乎负面了!

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

printf('-%d crazy cats',1+1);

您的措辞已关闭。'-'未被强制转换,而是被强制转换。

PHP仍然将(string) 1-1视为一个整数。

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

上面类似于说:

echo '-1' + '1 crazy cats';