一.问题描述
今天在修改以前的开发人员留下来的坑的时候,发现一个错误:
“source=”.$search["souce"]-1
结果这个字符串的值是-1
二.问题原因
也就是说, . (字符串连接符)和算术式在php里面的优先级是一样的,运算的顺序是
第一步:“source=”.$search["souce"]
第二步 第一步结果-1
可以第一步的结果是一个字符串啊,怎么做减法运算?那就强制类型转换(PHP在做算式之前都会做得事),得到的结果是0-1=-1
我写了一个demo,说明上述结果:
<?php $str="i am a string"; $num1="1";//这是个字符串,值是1 echo "‘1’的类型是" . gettype($num1); echo "<br/>"; echo "‘1’+0 的类型是" . gettype($num1+0) . "值是" . ($num+0); echo "<br/>"; echo "‘i am a string’+0 的类型是" . gettype($str+0) . "值是" .($str+0) ;
在浏览器上的结果是:
‘1’的类型是string
‘1’+0 的类型是integer值是1
‘i am a string’+0 的类型是integer值是0
三.解决方法
“source=”.$search["souce"]-1的问题,说白了其实就是一个运算顺序的问题,先进行建算式运算再进行字符串运算就行了。改变运算顺序的方法最直接的就是--括号
所以
“source=” . ($search["souce"]-1)
完美解决