PHP字符串表达式错误:这里发生了什么?

PHP字符串表达式错误:这里发生了什么?,php,operators,Php,Operators,表情 "a".(strlen('ab')-strlen('a')) 按预期计算为a1 但如果我不小心省略了括号 "a".strlen('ab')-strlen('a') 计算结果为-1。这里发生了什么?“a”。strlen('ab')-strlen('a')从左到右处理,如下所示: “a”.strlen('ab')变成字符串“a2” 现在您有了'a2'-1 不能从字符串中减法,因此字符串'a2'被强制转换为int,从而变成0 现在您有了0-1,它是-1 相关文章:,。我想当您省略

表情

"a".(strlen('ab')-strlen('a')) 
按预期计算为
a1

但如果我不小心省略了括号

"a".strlen('ab')-strlen('a') 
计算结果为
-1
。这里发生了什么?

“a”。strlen('ab')-strlen('a')
从左到右处理,如下所示:

  • “a”.strlen('ab')
    变成字符串“a2”

  • 现在您有了
    'a2'-1

不能从字符串中减法,因此字符串
'a2'
被强制转换为int,从而变成
0

  • 现在您有了
    0-1
    ,它是
    -1

相关文章:,。

我想当您省略“()”时,您可能还会收到非数值警告

作为一个正常的数学规则,括号首先在

strlen('ab')
为2和,
strlen('a')
是1, 所以2-1=1,它与“a”相连,所以变成了“a1”

当你去掉括号

"a".strlen('ab')-strlen('a') 
然后它从左到右执行,所以

  • strlen('ab')
    concate's with'a'表示a2
  • 然后用
    strlen('a')
    减去非数字的'a2',后者为1。因此,将显示警告
  • 但“a2”被迫转换为数字,因此最终变成0
  • 0-1=-1
  • 操作首先计算字符串长度的差异,然后将结果添加到
    “a”
    ,在此过程中将
    1
    转换为
    “1”


    操作将
    'ab'
    (2)的长度添加到
    “a”
    ,从而得到
    “a2”
    。之后,从这个字符串中减去
    “a”
    (1)的长度,但由于在PHP中只能在数字之间进行减法,因此
    “a2”
    转换为
    0
    ,从这里减去
    1
    会得到
    -1
    ,感谢您的精彩回答。我在手册中查找了PHP转换,发现a2转换为0是一个任意的决定(而不是引发错误消息)。PHP设计中的一个奇怪选择,因为只需在表达式前面加上@字符就可以抑制错误。
    "a".strlen('ab')-strlen('a') 
    
    "a".(strlen('ab')-strlen('a'))
    
    "a".strlen('ab')-strlen('a')