PHP连接优先级

Pak*_*ker 6 php casting operator-precedence

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

<?php echo '-' . 1 + 1 . ' crazy cats'; ?>
// Outputs:
0 crazy cats
Run Code Online (Sandbox Code Playgroud)

据我所知,减号被连接到第一个'1'和'-1'连接到整数,而不是'2'连接到字符串.

请解释原因.

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

<?php echo '-' . (string)1 + 1 . ' crazy cats'; ?>
Run Code Online (Sandbox Code Playgroud)

Ita*_*vka 6

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

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

  • 唉,你比我快:) BTW,运营商优先权可以通过http://php.net/manual/en/language.operators.precedence.php获得. (2认同)

sit*_*ite 1

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

printf('-%d crazy cats',1+1);
Run Code Online (Sandbox Code Playgroud)