zoco

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;