事前:
同事被调走了,留下来的代码还没测试。
发现输入框输入0的时候,无法执行数据库数据插入工作。找了html,js发现都没有check。
php里也找了许久。发现empty有点可疑。因为之前是做java 的,php不太熟,所以就去查了一下。
原来php中empty过滤掉空字符串的同时对0也会进行过滤。
接下来简单做个比对~
Java
代码:
1 public static void main(String[] args) { 2 3 String a = ""; 4 String b = null; 5 String c = new String(); 6 Kong(a, "a"); 7 Kong(b, "b"); 8 Kong(c, "c"); 9 10 } 11 12 private static void Kong(String x, String y) { 13 14 if ("" == x) { 15 System.out.println("'' == " + y); 16 } else { 17 System.out.println("'' != " + y); 18 } 19 20 if (null == x) { 21 System.out.println("null == " + y); 22 } else { 23 System.out.println("null != " + y); 24 } 25 26 try { 27 28 if (x.isEmpty()) { 29 System.out.println(y + " isEmpty"); 30 } else { 31 System.out.println(y + " isNotEmpty"); 32 } 33 34 } catch (NullPointerException e) { 35 36 System.out.print(y + " is empty" + " 报错啦: "); 37 System.out.println(e); 38 39 } 40 41 }
结果为:
1 '' == a 2 null != a 3 a isEmpty 4 '' != b 5 null == b 6 b is empty 报错啦: java.lang.NullPointerException 7 '' != c 8 null != c 9 c isEmpty
由此能看出a为空,分配了内存空间。b不为空,没分配内存空间。c不为空,分配了内存空间。isEmpty不能作用在null上,且a与c都是isEmpty。
PHP
代码:
1 <?php 2 $a = ''; 3 $b = null; 4 $c = 0; 5 Kong($a, "a"); 6 Kong($b, "b"); 7 Kong($c, "c"); 8 9 function Kong($x , $y){ 10 11 if(empty($x)){ 12 echo $y." isEmpty"."</br>"; 13 }else{ 14 echo $y." isNotEmpty"."</br>"; 15 } 16 }
结果为:
1 a isEmpty 2 b isEmpty 3 c isEmpty
果然,问题就出在这里了。所以只好把这个改成==‘’了。问题解决了,同时也学了东西。感谢那位调走的同事……
empty
判断变量是否已配置。
语法: int empty(mixed var);
返回值: 整数
函数种类: PHP 系统功能
内容说明
本函数用来测试变量是否已经配置。若变量已存在、非空字符串或者非零,则返回 false 值;反之返回 true。