字符串和算术式拼接的坑


一.问题描述

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

“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)

完美解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值