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')
从左到右处理,如下所示:
变成字符串“a2”“a”.strlen('ab')
- 现在您有了
'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'表示a2strlen('a')
减去非数字的'a2',后者为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')