PHP string expression error: what is happening here?

PHP string expression error: what is happening here?

表达式

"a".(strlen('ab')-strlen('a')) 

按预期评估为 a1

但是如果我不小心漏掉了括号,

"a".strlen('ab')-strlen('a') 

计算结果为 -1。这里发生了什么?

"a".strlen('ab')-strlen('a')从左到右处理如:

  • "a".strlen('ab') 变成 string "a2"

  • 现在你有 'a2' - 1

你不能从字符串中减去,所以 string 'a2' 被转换为 int 从而成为 0

  • 现在你有 0 - 1-1.

相关文章:operators precedence, string conversions.

我想当您省略“()”时,您可能还会收到 non-numeric 值的警告。

按照正常的数学规则,首先解决括号,因此在

"a".(strlen('ab')-strlen('a'))

strlen('ab') 是 2 并且, strlen('a') 为 1, 所以 2-1= 1 并且它与 'a' 连接所以变成 'a1'.

当你去掉括号时,

"a".strlen('ab')-strlen('a') 

然后从左到右执行所以

  1. strlen('ab') 与 'a' 连接得到 a2
  2. 然后 'a2' 即 non-numeric 减去 strlen('a') 即 1。因此显示警告。
  3. 但是'a2'被强制转换为数值,所以最后变成了0
  4. 0 - 1 = -1

"a".(strlen('ab')-strlen('a'))

操作首先计算字符串长度的差值,然后将结果添加到"a",在此过程中将1转换为"1"

"a".strlen('ab')-strlen('a') 

操作将 'ab' (2) 的长度添加到 "a",得到 "a2"。之后,从这个String中减去"a"(1)的长度,但是由于减法只能发生在PHP中的数字之间,所以"a2"转换为0并且从这里减去 1 得到 -1.