PHP连接优先级

6

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

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

我理解第一个'1'后面的减号被连接了,然后转换为整数'-1',而不是将第二个'2'转换为字符串。
请解释原因。
最好的解决方法是什么? 是这个吗?
<?php echo '-' . (string)1 + 1 . ' crazy cats'; ?>

惊讶这不是一个重复的问题..所以+1 - lsl
5个回答

6
首先,对于操作数的优先级,PHP 开发人员已经定义得很正确了。如果它们不同,那么也是正确的。在此情况下,没有操作数拥有优先级,所以您需要从左到右阅读。
  1. '-' . 1 ==> '-1'
  2. '-1' + 1 ==> 0(字符串的算术运算,会尝试先将其转换为数字,然后再进行算术运算)。
  3. 0 . ' crazy cats' ==> "0 crazy cats"(数字的字符串操作,会将它们转换为字符串)。

2
哎呀,你比我快了 :) 顺便说一下,运算符优先级可以在 http://php.net/manual/en/language.operators.precedence.php 上找到。 - Bruno Silva

4

如果你想获取-2只疯狂的猫,你可以通过使用括号设置操作顺序:

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

3

echo也遵循echo 'foo','bar'的结构,将项目分成不同的语句进行回显。在这种情况下,您不必担心连接顺序。

因此,您可以执行<?php echo '-',(1 + 1),' crazy cats'; ?>,您的猫不会介意负数!


1

如果您喜欢,这可以避免优先级问题:

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

1

你的措辞有误。 '-' 不是被转换为字符串,而是被连接。

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

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

以上类似于说:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接