请稍等...页面即将加载完成
易忽视的php错误【保持更新】
最近发现一些易忽视的php错误,这些错误在大多数情况下是不会有什么问题的,但如果咬写开源代码,这种问题绝不可犯,否则一定或多或少存在安全漏洞,给不法分子钻了空子。
1、switch语句条件中的0,不理解原因,感叹一下这神奇的0:
View Code PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | switch(0){ case 'xxx': echo 'haha1'; break; default: echo 'hehe'; }//haha1 switch(0){ case true: //true换成数字一样 echo 'haha2'; break; default: echo 'hehe'; }//hehe |
先不说解决方法,在继续来一个例子:
2、in_array中的0
View Code PHP
1 2 3 | var_dump(in_array(0, array('x', 'a'))); //true var_dump(in_array(0, array(1, true, false))); //true var_dump(in_array(0, array(1, true, 2))); //false |
这个错误和上面的错误貌似有异曲同工之妙,看来可以大胆推测下面这个等式的成立:
View Code PHP
1 2 3 4 | var_dump(0 == 'xxx'); //true var_dump(0 == false); //true var_dump(strval(0) == 'xxx'); //false var_dump(true == 'xxx'); //true |
所以避免这种问题的办法是strval($arg)使之与比较对象具有相同类型。
3、empty中的’0′字符串
View Code PHP
1 2 3 4 | $a = '0'; //同数字0、false if(empty($a)){ echo 'xxx'; } //xxx |
这个问题在官方文档中有说明,不小心容易忽视。
4、非全等判断
View Code PHP
1 | var_dump('0123' == '123'); //true |
这个东西就更不用说了,公司用户名曾犯的错,记忆深刻
5、一些‘类’函数结构
View Code PHP
1 2 3 4 | $somevar = 12; $func="unset"; $func($somevar); //undefined function unset() //function_exist('unset'); //false |
像unset()、echo()这种都属于语言结构的一部分,并非函数。
6、unset全局变量的解决办法:
View Code PHP
1 2 3 4 5 6 7 8 | $id = 1; function test() { global $id; unset($id); } test(); echo($id); //1 |
这种方式在PHP3中运行正常(虽然我没试),在php4以上需要使用:
View Code PHP
1 | unset($GLOBALS["id"]); |
好了,没了,先就写这么多,欢迎大家来抨击。
上一篇: PHP调用python服务接口
下一篇: 大好青春浪费在canvas上,坑爹啊

2011/09/26 于 06:31:09
和数字比较的时候php会自动转换字符串的类型
intval(‘xxx’); //0
2011/06/18 于 04:16:13
党员,过来踩踩