这种行为在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' + 1 ==> 0
(对字符串进行算术运算,将尝试先将其转换为数字,然后再进行算术运算)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';