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
.
我想当您省略“()”时,您可能还会收到 non-numeric 值的警告。
按照正常的数学规则,首先解决括号,因此在
"a".(strlen('ab')-strlen('a'))
strlen('ab')
是 2 并且,
strlen('a')
为 1,
所以 2-1= 1 并且它与 'a' 连接所以变成 'a1'.
当你去掉括号时,
"a".strlen('ab')-strlen('a')
然后从左到右执行所以
strlen('ab')
与 'a' 连接得到 a2
- 然后 'a2' 即 non-numeric 减去
strlen('a')
即 1。因此显示警告。
- 但是'a2'被强制转换为数值,所以最后变成了0
- 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
.
表达式
"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
.
我想当您省略“()”时,您可能还会收到 non-numeric 值的警告。
按照正常的数学规则,首先解决括号,因此在
"a".(strlen('ab')-strlen('a'))
strlen('ab')
是 2 并且,
strlen('a')
为 1,
所以 2-1= 1 并且它与 'a' 连接所以变成 'a1'.
当你去掉括号时,
"a".strlen('ab')-strlen('a')
然后从左到右执行所以
strlen('ab')
与 'a' 连接得到 a2- 然后 'a2' 即 non-numeric 减去
strlen('a')
即 1。因此显示警告。 - 但是'a2'被强制转换为数值,所以最后变成了0
- 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
.