总结下常在PHP犯错的地方

1.PHP5.4以下版本,定义数组还是老老实实用

$arr = array();

而不要使用:

$arr = [] ;

2.要使用json_decode函数时,记得把每组冒号前后的字符串用双引号括起来,然后最外层再用单引号

例如以下字符串是无法解析的(当然,这是PHP完全遵循JSON规范):

$questions = "{0:'语言是存在的家园,这是谁的理论?',1:'描写君子的外表下面哪个不常见?',2:'君王要想使人信服须具备'}";

而应使用像下面这样的:

$questions = '{0:"语言是存在的家园,这是谁的理论?",1:"描写君子的外表下面哪个不常见?",2:"君王要想使人信服须具备"}';

3.PHP5.4以下版本不能这样写

echo explode("---","123")[0];

应该这样写,不然会报错:

$arr = explode("---","123");
echo $arr[0];

4.

"a" == 0 ;   //true

5.

$arr = ['12a','b'];
echo in_array(12,$arr);  // true

6.cURL执行时会无视PHP的超时设置:

ini_set("max_execution_time",1800);

所以最好设置每次使用cURL时设置CURLOPT_TIMEOUT

7.strpos 第二个参数若为数字,PHP内部的计算方式如下:

strpos('a1b2c777777',777777);
//等价于
strpos('a1b2c777777',chr(777777%256));

得到的结果就是字符’1’在字符串中出现的位置

  1. list($key,$value) = each(array('123'=>'abc'));
    

PHP会自作主张把 ‘123’转换成 int

9.使用array_multisort对数组重新排序的时候,函数内部会把数字key重新索引从0开始。同样也会把字符串数字小于2^31(即2147483648)的key自动转成int然后重新索引。

10.urldecode 会将 ‘+’ 转成空格,rawurldecode 则不会。 另:超全局变量 $_GET$_REQUEST 已经被解码了