字符串和算术式拼接的坑

来源:互联网 发布:淘宝网休闲女鞋红 编辑:程序博客网 时间:2024/05/29 13:00

一.问题描述

今天在修改以前的开发人员留下来的坑的时候,发现一个错误:

“source=”.$search["souce"]-1

结果这个字符串的值是-1


二.问题原因

也就是说, . (字符串连接符)和算术式在php里面的优先级是一样的,运算的顺序是

第一步:“source=”.$search["souce"]

第二步 第一步结果-1

可以第一步的结果是一个字符串啊,怎么做减法运算?那就强制类型转换(PHP在做算式之前都会做得事),得到的结果是0-1=-1


我写了一个demo,说明上述结果:

<?php$str="i am a string";$num1="1";//这是个字符串,值是1echo "‘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)

完美解决

原创粉丝点击