PHP是世界上最好的语言!之……
2015-03-02
1.++与–
<?php
$a = null;
$a ++;
var_dump($a);
echo "\n";
$a = null;
$a --;
var_dump($a);
执行结果为
int(1)
NULL
++的时候为1我还可以理解 –的时候为null我就凌乱了
解决这种++和–中的不一致的办法就是根本不用它们,用+=和-=代替。
2.strrchr函数
官方解释
strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。 如果成失败,否则返回 false。
实际上,这个函数是查找某个字符,而不是查找字符串
<?php
$a = 'abcdef.txt';
$b = '.php';
echo strrchr($a, $b);
上面的代码输出是:.txt 也就是说,如果$b是字符串,只使用第一个字符,后面的其它字符会忽略
3.trim函数遇到中文空格时,会乱码
<?php
$str = ' 《前后有全半角空格》 ';
var_dump($str);
$str2 = trim($str, ' ');
var_dump($str2);
执行结果为:
string(38) " 《前后有全半角空格》 "
string(28) "�前后有全半角空格》"
这个问题的修改方法是采用正则
<?php
$str = ' 《前后有全半角空格》 ';
var_dump($str);
$str3 = mb_ereg_replace('^(?:\s| )+|(?:\s| )+$', '', $str);
var_dump($str3);
执行结果为:
string(38) " 《前后有全半角空格》 "
string(30) "《前后有全半角空格》"
4.执行SQL后不判断返回值,或判断逻辑错误
$sql = 'insert into app_log(id) select 0 from dual where 1=2';
$this->db->query($sql);
return true; // 不加判断,直接返回true
$sql = 'insert into app_log(id) select 0 from dual where 1=2';
$result = $this->db->query($sql);
if ($result) { // 有bug,插入不成功,result也是true
return true;
}
return false;
上面的2段代码应该改成:
$sql = 'insert into app_log(id) select 0 from dual where 1=2';
$this->db->query($sql);
// 如果sql有语法问题,affected_rows是-1
if ($this->db->affected_rows() > 0) {
return true;
}
return false;