PHP可能会遇到的坑二

小云云
小云云 原创
2023-03-21 17:44:01 930浏览

前面我们和大家分享了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可能会遇到的坑二的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。