字符串和算术式拼接的坑

xiaoxiao2021-02-28  91

一.问题描述

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

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

完美解决

转载请注明原文地址: https://www.6miu.com/read-56035.html

最新回复(0)