php的一个判断值是否等于0的陷阱

By | 03月04日
Advertisement

原文地址:http://blog.fj18.com/post/199.html

先给一段代码:

  1. $a = ' Zero ' ;
  2. $b = 0 ;
  3. if ( $a == $b ) {
  4. echo ' True ' ;
  5. }
  6. else {
  7. echo ' False ' ;
  8. }

我们预期的结果是False吧,但很遗憾,输出结果是True。
为什么会这样呢?原来是PHP在做字符串和数字进行比较时,会把字符串转为数字,如果字符串首字母不是数字或-时,会被转成0,然后杯具就发生了。

解决办法有2种:
1、如果确定2边的值的类型就用===来代替==;
2、如果不确定,可以把在比较前做一下类型转换,确保等式2边的值类型一致。

这个问题是项目组一个同事发现的,做一下记录。

Similar Posts:

  • 我说在某些主板上int 13;AH = 02H,返回值AL等于0你信吗?

    DISK - READ SECTOR(S) INTO MEMORY AH = 02h AL = number of sectors to read (must be nonzero) CH = low eight bits of cylinder number CL = sector number 1-63 (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive num

  • Java源码中的发现:快速判断一个int值是几位数

    判断一个int值是几位数,要是我自己实现,估计又会想到除法和模运算了,偶然在java标准API源码中发现的写法,很强大. public class Test { final static int[] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE }; static int sizeOfInt(int x) { for (int i = 0;; i++)

  • c程序:有一函数当x<0时y=1,当x>0时,y=3,当x=0时y=5,编程,从键盘输入一个x值,输出y值

    //有一函数当x<0时y=1,当x>0时,y=3,当x=0时y=5,编程,从键盘输入一个x值,输出y值 #include <stdio.h> void main(void) { float x; int y; printf("Please input a number:"); scanf("%f",&x); if(x < 0) printf("y=%d", y = 1); else if (x > 0)

  • 一个判断日期时间格式的JavaScript代码

    http://blog.csdn.net/Ivy_zheng/article/details/5311459 一个判断日期时间格式的JavaScript代码 作者:最后一只恐龙 在ASP.NET中,经常遇到输入日期时间的情况,这段代码主要用来判断日期和时间是不是合法.日期格式为第一个函数IsDate(strDate),支持yyyy-MM-dd和yyyy-M-d两种形式:日期时间为第二个函数IsDateTime(strDateTime),支持yyyy-MM-dd HH:mm:ss和yyyy-M-d

  • union是什么【编写一个判断大端小段c程序】

    union 关键字的用法与struct 的用法非常类似. union 维护足够的空间来置放多个数据成员中的"一种",而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址.例子如下: union StateMachine { char character; int number; char *str; double exp; }; 一个union 只配置一个足够大的空间以来容纳最大长度的数据成员,以

  • 我的疑问:计算机怎么感知-128等于-0的?

    我的疑问:计算机硬件怎么感知-128等于-0? 以下面的程序入手分析: int main() { char a[1000]; int i; for(i=0; i<1000; i++) { a[i] = -1-i; } printf("%d",strlen(a)); return 0; } 分析上面的程序:a[i]=-1,-2,-3,-,-254,-255-,但是,这些数在计算机内部是怎么存的? 大前提是(char的默认状况是存的有符号数,并且数据在计算机内部是以补码的形式存的)

  • 编写一个判断素数的函数

    写一个判断素数的函数,在主函数中输入一个整数,输出是否为素数的信息. #include "stdafx.h" #include<iostream> using namespace std; bool sushu(int a) //sushu是bool型的函数,返回值只能是true或false { if(a<2) { return false; } for(int i=2;i<a;i++) { if(a%i==0) return false; } return t

  • 我的疑问:计算机硬件怎么感知-128等于-0?

    我的疑问:计算机硬件怎么感知-128等于-0? 以下面的程序入手分析: int main() { char a[1000]; int i; for(i=0; i<1000; i++) { a[i] = -1-i; } printf("%d",strlen(a)); return 0; } 分析上面的程序:a[i]=-1,-2,-3,-,-254,-255-,但是,这些数在计算机内部是怎么存的? 大前提是(char的默认状况是存的有符号数,并且数据在计算机内部是以补码的形式存的)

  • 一个判断session是否过期的小技巧

    前一段时间有好几个问题,提到怎么判断session是否过期. 接触jspo已经很久了,但是还真没有想过这个问题,当时也就没有找到一个满意的答案给人家. 当时,我提到一个方法,就是实现HttpSessionListener接口,然后在sessionDestroyed()方法中执行一些操作,表示session要过期了,因为这个方法是session.invalidate()之前监听器调用的方法.这个判断的方法显然不能让人满意. 我当时问了些人,但是也没有得到一个准确的答案. 正好偶然间看到,reque

  • xml转换 xsl &lt;xsl:if 判断值为空

    使用 XSLT 将 XML 转换为 XHTML ,<xsl:if 判断值是否为空 . 网上搜了下,最后选中其中一种方法. <xsl:if test="price = '' or year = '' "> //做的事情 //多值判断 与或非 采用 and 和 or 而不是 java语法的 && 和 || </xsl:if> 1.xml代码 <?xml version="1.0" encoding="UTF-

Tags: