您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

PHP可能会遇到的坑二

2024/5/18 11:55:13发布6次查看
前面我们和大家分享了php可能会掉入的坑一,本文我们接着和大家分享php可能会遇到的坑二,希望能帮助到大家。
在php的实际开发过程中遇到的一些坑,其中有部分是自己的理解不够而造成的,坑到深处,真是泪流满面啊。
关于整数与字符串比较,这个问题纠正过别人一次,最后不想自己也栽进来了,真是难堪,记下来,谨防再犯!
直接来看这个例子:
<?php $foo = 0; $bar = 'a3b4c5'; if ( $foo < $bar ) { echo 'output'; }
会不会有输出呢,答案是不会,为什么呢?因为数字跟字符串比较时,字符串会被转换成数字,如果你调用转换成整型的函数 intval( $bar ) ,会发现它的值就是0了,自然也就不大于0了。如果$bar的值是'3a4b5c',那么结果就会被输出了,因为这时字符串转成数字的值是3了。具体的转换规则,可以参考php manual:
http://us2.php.net/manual/zh/language.types.string.php#language.types.string.conversion
其实如果$foo被初始化成''的话,用两个字符串比较,也不会出错了。
接上坑,再来看一个:
if ( $foo == 'a1b2c3' ) { echo 'output'; }
这次会不会被输出呢?答案是会,原因其实跟上面的相同,'a1b2c3'在比较时被隐式类型转换成了0。
如上问题解决办法无非是让两个数以相同的类型进行比较,而不用进行隐式类型转换,这时全等号(===)就发挥作用了,因为三个等号不光会比较值,还会比较类型。另外在字符串进行比较的时候,如果使用 strcmp() 函数,也不会出现这个问题。
再来一例:
$checkedkeys = array('somekey1', 'somekey2'); $arrtest = array('somekey1' => 'somevalue', 'othervalue'); foreach ($arrtest as $key => $value) { if (in_array($key, $checkedkeys)) { echo "the key valid: $key \n"; } }
类似的,这里会有两次输出,第二次输出的$key是0,理解了吗?解决办法是在 in_array()函数中加上第三个参数并设为true,进行严格的类型比较,文档在这http://php.net/manual/zh/function.in-array.php
php这门语言的一大优点就是灵活,而这也就为平时不认真谨慎而写下的代码带来了隐患。
相关推荐:
php可能会掉入的坑一
以上就是php可能会遇到的坑二的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录