欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP可能会遇到的坑二

程序员文章站 2022-04-12 10:39:42
...
前面我们和大家分享了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 遇到 可能