2012-07-19 63 views
6

这种行为在PHP中是否正确?PHP类型转换优先级

​​

据我所知,减去被级联以铸造为整数的第一个“1”和“-1”,而不是“2”为字符串。

请解释原因。

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

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

惊讶,这不是愚弄的人..所以+1 – Louis 2012-07-19 02:01:20

回答

1

如果你愿意的话,这样就避免了优先级:

printf('-%d crazy cats',1+1); 
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。 – 2012-07-19 01:55:34

1

您的言辞已关闭。 '-'没有被铸造,但被连接。

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

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

以上是类似于说:

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

当然没有铸造亏损,纠正了这个问题。 – Paker 2012-07-19 01:59:31

4

如果你想疯-2猫,你可以设置优先处理与括号:

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

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

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