Rumah >pembangunan bahagian belakang >tutorial php >PHP可能会遇到的坑二

PHP可能会遇到的坑二

小云云
小云云asal
2018-03-19 15:00:351275semak imbas

前面我们和大家分享了PHP可能会掉入的坑一,本文我们接着和大家分享PHP可能会遇到的坑二,希望能帮助到大家。

在PHP的实际开发过程中遇到的一些坑,其中有部分是自己的理解不够而造成的,坑到深处,真是泪流满面啊。

关于整数与字符串比较,这个问题纠正过别人一次,最后不想自己也栽进来了,真是难堪,记下来,谨防再犯!

直接来看这个例子:

<?php
$foo = 0;
$bar = &#39;a3b4c5&#39;;
if ( $foo < $bar ) {
    echo &#39;output&#39;;
}

会不会有输出呢,答案是不会,为什么呢?因为数字跟字符串比较时,字符串会被转换成数字,如果你调用转换成整型的函数 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 == &#39;a1b2c3&#39; ) {
    echo &#39;output&#39;;
}

这次会不会被输出呢?答案是会,原因其实跟上面的相同,'a1b2c3'在比较时被隐式类型转换成了0。

如上问题解决办法无非是让两个数以相同的类型进行比较,而不用进行隐式类型转换,这时全等号(===)就发挥作用了,因为三个等号不光会比较值,还会比较类型。另外在字符串进行比较的时候,如果使用 strcmp() 函数,也不会出现这个问题。

再来一例:

$checkedKeys = array(&#39;someKey1&#39;, &#39;someKey2&#39;);
$arrTest = array(&#39;someKey1&#39; => &#39;someValue&#39;, &#39;otherValue&#39;);
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可能会掉入的坑一

Atas ialah kandungan terperinci PHP可能会遇到的坑二. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:PHP可能会掉入的坑一Artikel seterusnya:php中tree类的使用方法