这种行为在PHP中是否正确?
<?php echo '-' . 1 + 1 . ' crazy cats'; ?>
// Outputs:
0 crazy cats
我理解第一个'1'后面的减号被连接了,然后转换为整数'-1',而不是将第二个'2'转换为字符串。
请解释原因。
最好的解决方法是什么? 是这个吗?
<?php echo '-' . (string)1 + 1 . ' crazy cats'; ?>
这种行为在PHP中是否正确?
<?php echo '-' . 1 + 1 . ' crazy cats'; ?>
// Outputs:
0 crazy cats
<?php echo '-' . (string)1 + 1 . ' crazy cats'; ?>
'-' . 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';